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参数调用格式。
Delphi如何调用C++写的DLL
原创
©著作权归作者所有:来自51CTO博客作者小宇飞刀的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
c#网站调用c++写的dll库
<br />c++
dll c++ c# string object -
Delphi调用C写的dll
一.用C语言写了一个Dll,编译成功。是一个非常简单的加密算法
动态链接库 vc++ 源文件 vc++6.0 应用程序 -
JavaScript 调用 delphi dll javascript 调用c++库
太监的原因: VC与JavaScript交互(二)的时候,参考网上的资料,已经把JavaScript调用c++实现了。可是实现方法太恶心了,代码写出来太复杂太麻烦了,而且还涉及到了一大堆见都没见过的COM接口,每个接口都是一大堆函数和一大堆参数,虽然实现代码写出来了,但是为什么这么写,根本讲不清楚,怕误人子弟,便可耻的太监了。 当初为了写自动打开网页,自动填单,自动
C++与Javascrpit交互 C++调用Javascrpit Javascrpit调用C++ VC调用JS JS调用VC -
JavaEE初阶5.0
多线程4.0~
#JavaEE初阶 加锁 多线程 线程安全
















