dll怎么带参数调用(100分)

B

bbcoll

Unregistered / Unconfirmed
GUEST, unregistred user!
象这样 c:/aa.dll/bb
怎么把参数传进去
另:怎么把资源文件压入DLL中,还有其它文件也压入DLL中,
请说得详细一点
最好有代码参考
 
C

Crane

Unregistered / Unconfirmed
GUEST, unregistred user!
请问,c:/aa.dll 不带参数,能执行吗??
 
A

AIHUA

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi5中已经内置了专门的设置(想不出更好的说法)
选File->New->Resource DLL Wizard即可
她会生成一个和你原来程序完全一样的project,
放在china(中文)...目录下
你的工作就是针对性的翻译一下,编译一下,会自动生成???.chs(或其他国家)
的连接库
然后拷贝到你的可执行文件可以查到的的目录下
启动时,你的程序会自动判别是不是处于中文环境下,然后启动正确的语言版本
 
A

AIHUA

Unregistered / Unconfirmed
GUEST, unregistred user!
转!
从Delphi3开始就支持国际化资源模块.

一、建立相应应用程序、DLL或包的国际化资源模块,具体方法如下:
1、在Delphi中选择File|New菜单,建立新的DLL;
2、仅仅包含已经本地化的资源,比如:MyApp.frm和MyApp.res
{$R MyApp.res}
{$R MyApp.dfm}
3、该DLL文件取名应该与应用程序、DLL或包的名称相同,扩展名取名为当地代码。
当应用程序、DLL或包启动时,会自动寻找[当前目录下]与本地代码相符合的国际化资源模块,如果找不到,才使用应用程序内部的字符串资源。

字符串资源的国际化:
将要国际化的字符串集中到一个单元,使用ResourceString对字符串进行说明:
Unit Msgs;
interface
resourcestring
sInPasswd='Incorrect password';
sTextFileExt='.txt';
sUnableOpen='Unable to open file';
sUnableCreate='Unable to Create file';
sLZRWStreamReadErr = 'Error reading from input stream !';
sLZRWSTREAMWriteErr = 'Error writing to output stream !';
sLZHSizeErr ='Original and compressed sizes do not match !';
implementation
end.

然后使用命令行参数:-gd或在项目参数设置中的linker页面上选取request Detailed Map File,它将在编译时产生包含使用ResourceString宣称的所有字符串的资源文件:.DRC。每当你重新编译一次,你就需要重新“翻译”一次文件(.DRC)。
当你翻译完该文件(.DRC)后,使用BRCC32将.DRC文件编译为资源文件(.RES)。最后你就可以将它联接到国际化资源模块:
{$R MyApp.res}
Must like this:

library MyExample;
{$R MyStrings.res} {my strings resource}
{$R MyExample.res} {Delphi Auto gernerate! if have not this,Delphi will overwrite MyStrings.res,this can work now.}
{$R Dlg1.dfm}
{$R Dlg2.dfm}
{$R SplashForm.dfm}
{$R AboutDlg.dfm}
{$R unit1.dfm}
uses
Windows;

{$E chs}
begin
end.

二、动态切换国际化资源模块
你可以在运行时,动态切换语言,首先你应该使用ReInit单元,然后调用LoadNewResourceModule装入新的语言模块,最后重新初始化窗体ReinitializeForms。
例如,以下的代码将语言切换到法语:
const
FRENCH = (SUBLANG_FRENCH shl 10) or LANG_FRENCH;

if LoadNewResourceModule(FRENCH) <> 0 then
ReinitializeForms;
注意:任何改变后的属性在新语言装入后将失去,恢复为默认值。


附录:
当地代码可以使用GetLocaleInfo函数取得,指定第二个参数为LOCALE_SABBREVLANGNAME,程序实例如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
LocaleList: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function GetLocaleData(ID: LCID
Flag: DWORD): string;

var
BufSize: Integer;
begin
BufSize := GetLocaleInfo(ID, Flag, nil, 0);
SetLength(Result, BufSize);
GetLocaleinfo(ID, Flag, PChar(Result), BufSize);
SetLength(Result, BufSize - 1);
end;

{ Called for each supported locale. }

function LocalesCallback(Name: PChar): Bool
stdcall;
var
LCID: Integer;
begin
LCID := StrToInt('$' + Copy(Name, 5, 4));
Form1.LocaleList.Lines.Add(GetLocaleData(LCID, LOCALE_SLANGUAGE)
+':'+GetLocaleData(LCID, LOCALE_SABBREVLANGNAME));
Result := Bool(1);
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
EnumSystemLocales(@LocalesCallback, LCID_SUPPORTED);{枚举出系统内的所有当地代码}
end;

end.


常用当地代码列表:
巴士克语:euq
加泰隆语:cat
丹麦语:dan
荷兰语(标准):nld
荷兰语(比利时):nlb
英语(美国):enu
英语(英国):eng
英语(澳大利亚):ena
英语(加拿大):enc
英语(新西兰):enz
英语(爱尔兰):eni
芬兰语:fin
法语(标准):fra
法语(比利时):frb
法语(加拿大):frc
法语(瑞士):frs
德语(标准):deu
德语(瑞士):des
德语(奥地利):dea
冰岛语:isl
意大利语(标准):ita
意大利语(瑞士):its
挪威语(伯克梅尔):nor
挪威语(尼诺斯克):non
葡萄牙语(巴西):ptb
葡萄牙语(标准):ptg
西班牙语(传统):esp
西班牙语(墨西哥):esm
西班牙语(现代):esn
瑞典语:sve
南非荷兰语:afk
英语(南非):ens
法语(卢森堡):frl
德语(卢森堡):del
德语(列支敦士登):dec
印度尼西亚语:ind
繁体中文(台湾):
简体中文(中国):chs

 
A

alextsui

Unregistered / Unconfirmed
GUEST, unregistred user!
在DLL裡面加入資源AIHUA已經說得很詳細了, 但DLL能帶參數調用就不知道了, 我只在ISAPI
上可以這樣做, 不知道有沒有高手指點一二, 謝謝.
 
B

bbcoll

Unregistered / Unconfirmed
GUEST, unregistred user!
With canvas do
begin
if StateOn then //打开
begin

end;
if not StateOn then
begin
moveto(2,0);
lineto(2,YCenter div 2);
moveto(2,(ycenter div 2 + ycenter));
lineto(2,Height);
moveto(4,YCenter div 2);
lineto(4,((ycenter div 2) *3));

Brush.Color :=clLime;
Ellipse(0,(YCenter div 2-2),4,(YCenter div 2+2));

Ellipse(0,(((ycenter div 2) *3)-2),4,(((ycenter div 2) *3)+2));

end;//关
end
 
T

tseug

Unregistered / Unconfirmed
GUEST, unregistred user!
DLL调用的命令行参数就是调用它的那个可执行文件的命令行参数,你写个小例子就知道了
 
顶部