Delphi如何调用C++写的DLL

 BOOL  WINAPI funname(char *pFileName,char *pID);
这是C++写的一个DLL里面的函数

我现在想用delphi调用这个函数
静态:
function funname(var pFileName:pchar;var pID:pchar):integer;stdcall; external 'DLLNAME.dll' name 'funname';
动态:
OneHandle := LoadLibrary(DLLNAME.dll'); //动态载入DLL,并返回其句柄 try if oneHandle<>0 then @funname:= GetProcAddress(OneHandle,'funname'); if not( @funname = nil ) then ..... finally FreeLibrary(OneHandle);
现在调试数据不成功
是不是传参问题呢
还是函数在delphi里调用不对
调用应该是成功的
哪位高手帮帮忙
--------------------------------------------------------------------------------
试过了   不行滴说
--------------------------------------------------------------------------------
type TFun = function(FileName: PChar; ID: PChar): BOOL; stdcall; var Func: TFunc; begin Handle := LoadLibrary(DLLNAME.dll'); //动态载入DLL,并返回其句柄 try if Handle > 0 then Func := GetProcAddress(Handle, 'funname'); if Assigned(Func) then Func('MyFileName', 'MyID'); finally FreeLibrary(Handle); end

--------------------------------------------------------------------------------
function funname(pFileName:pchar; pID:pchar):integer; stdcall; external 'DLLNAME.dll' name 'funname';
这样试下,一般char *对应的是PChar,而不是var A: PChar
--------------------------------------------------------------------------------
dll可能不是按照标准顺序调用参数的
--------------------------------------------------------------------------------
先用vc++做个dll,记得声明函数的时候要_stdcall做前缀,例如:
_stdcall int TestC(int i);
_stdcall char* add1(char *s);
然后将此dll放在delphi程序的目录里,在delphi动态引用此dll的某函数的时候,要用cdecl做后缀;例如:
M:function(i:integer):integer;cdecl; M1:function(i:pChar):pChar;cdecl; //-------------------------------------------------------------------------------- function funname(pFileName:pchar; pID:pchar):integer; stdcall; external 'DLLNAME.dll' name 'funname'; //也可以这样试试 function funname(pFileName:pchar;var pID:char):integer; stdcall; external 'DLLNAME.dll' name 'funname'; //-------------------------------------------------------------------------------- delphi中的char *是pansichar //--------------------------------------------------------------------------------

ansean基本把这个问题说清楚了。
1、保证你传递的参数要正确:C++中的char *对应PASCAL中的pchar。
2:C++中导出的函数的参数调用方式要和你DELPHI中的导入的函数参数调用方式要一致!
 例如:    C++的参数调用方式           对应的DELPHI的参数调用方式
           _declspec                              cdecl
           WINAPI,CALLBACK                        stdcall
           PASCAL                                 pascal
我遇到过你同样的问题,后来把STDCALL改为cdecl,问题就解决了,因为我在C++导出函数时使用的是“_declspec(dllexport)”,也就是C参数调用格式。

转载于:https://www.cnblogs.com/xieyunc/archive/2009/04/27/9126715.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值