你这个是C++语法耶,改成Delphi应该是
function Crypt_Get_Version(version :PChar) :integer;
只要在Dll的输出段中声明这个函数的原型就可以了
function Crypt_Get_Version(version :PChar) :integer;
只要在Dll的输出段中声明这个函数的原型就可以了
解决方案 »
- D7下加解密一直到2010出问题
- Delphi 有没有代码折行的工具
- delphi如何备份orcal数据库?
- Java写的WebService如附件所示例
- ADO运行存储过程超时的问题
- 各位帮我看看我这种情况,如果我去广州或者深圳找工作能拿多少工资?
- 一个简单的问题
- 请有善心的大侠看看这个关于午夜狂飚2的问题
- 查询问题.请路过的兄弟们。进来看看。
- 关于MDI的子窗口控制问题?
- 菜鸟求救:Delphi第三方控件到底如何安装?为什么我以选择COMPILER按钮就说有Internel Error:URW3XXX什么的错误?是不是因为是D版的缘故
- 有谁知道ExcelApplication怎样和Excel表相连接啊?
你不是说要在dll文件里面添加声明吧?我没法修改dll文件啊,没给我源码。
是在主程序里的implementation字段添加function Crypt_Get_Version(version :PChar) :integer;吗?这不是叫做创建时声明吗?后面还要加上external吗?我用LoadLibrary和GetProcAddress的运行时调用也要加上这种声明?
implementation
function Crypt_Get_Version(version:PChar):integer;stdcall;
external'ca.dll';
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
HInst:THandle;
FPointer:TFarProc;
MyFunct:TIntFunction;
begin
HInst:=LoadLibrary('ca.dll');
if HInst>0 then
try
FPointer:=GetProcAddress(HInst,PChar('Crypt_Get_Version'));
if FPointer<>nil then
begin
//MyFunct:=TIntFunction(FPointer);
Label1.Caption:=version;
end
else
Label1.Caption:='DLL loaded';
finally
FreeLibrary(HInst);
end;
end;显示出来的还是“version.dll”啊,要怎样取用这个version呢?
TDllfunction = function Crypt_Get_Version(version :PChar) :integer;stdcall;
注意加stdcall或cdecl之类,与动态库里面的定义一致
实在不行就一个个试form1里面定义一个私有的函数:
Dllfunction :TDllfunction;formcreate里面
DllHandle := LoadLibrary('ca.dll');
@Dllfunction :=GetProcAddress(DllHandle, 'Crypt_Get_Version');
调用dll
buffer :pchar ;
buffer:=PChar(AllocMem(256));
Dllfunction(buffer) ;
我尝试调用了其他不需要参数的函数,没有问题,只是不懂参数的调用了。
buffer :pchar ;
buffer:=PChar(AllocMem(256));
Dllfunction(buffer) ;
是干什么的呢?
Dllfunction已经指向Crypt_Get_Version了
版本号是作为字符串传回来的,自己努力把
原来我一直把函数返回的integer当作了要用的数据,我刚刚澄清了一点:函数返回值是标志该函数状态的,如0表示函数调用成功,而函数所声明的参数有的要赋值做输入,有的只要给它个变量等函数进行操作后当作输出,就像这里的version,我一直的疑惑就是以为这个version要先赋值等于某个东西,然后传给Crypt_Get_Version()函数,然后函数的返回值应该等于“2.0”。现在我用
Dllfunction(buffer);
label1.Caption:=buffer;
终于可以显示“2.0”啦,耶!!!
呵呵真是一语惊醒梦中人啊,谢谢nebulaly(竹风论坛)兄指点!50分送上!
对了还有个遗留问题:对于原先C++声明的Char *version,应该改作version :PChar,要是unsigned char *version呢?是不是还写version :PChar?那么对于 Int *version又应该改作什么呢?