delphi调用vc编写的dll,出现错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi调用vc编写的dll,出现错误相关的知识,希望对你有一定的参考价值。

vc中的char *对应于delphi的pchar吧,,
这是vc里定义的函数:
extern "C" _declspec(dllexport) int login(char *name,char *password)
这是delphi中定义的:
unit Ulogin;
interface
function login(name,password:pchar):Integer;stdcall;
implementation
function login;external 'login.dll' name 'login';
end.
....错误信息在图片中,,,,,
我以前写过,也是这种形式,没有错,就参数不一样,不知道sdtcall怎么在vc中声明,,
在delphi改是可以的..
不过extern "C" _declspec(dllexport) __stdcall int login(char *name,char *password)
这样写会出错的....

因为你在C的这边函数声明没有使用STDCALL声明,而DELPHI用的则用了STDCALL故造成问题.

方法一: 改DELPHI代码:
function login(name,password:pchar):Integer;stdcall;
改成
function login(name,password:pchar):Integer;cdecl;

当C函数不使用STDCALL方式声明时, 默认的约定叫C declare (看字面意思就应该明白,C的函数声明方式)
DELPHI对应的就是cdecl

方法二: 改C部分代码
extern "C" _declspec(dllexport) int login(char *name,char *password)
改成

extern "C" _declspec(dllexport) __stdcall int login(char *name,char *password)
参考技术A 贴出具体错误信息呢。
没有获取DLL里正确的函数地址。
参考技术B 检查下VC导出的调用约定。你在delphi中已经说了用stdcall,VC一定要用sdtcall才能成功调用,但是VC一般不用stdcall的,要手动声明。

有条件反汇编下0x74ebc9f1,跟踪看看堆栈情况,仔细找找问题。
参考技术C 调用的问题吧,login函数的两个参数是如何定义的,又是如何调用的?

delphi调用VC写的Dll报错

VC声明:
extern "C" char* _stdcall RecogniseToFile(char* key,char* Path)
DELPHI调用:
Function get1(key:PChar;Path:pchar):PChar;stdcall;external 'Decode.dll' name get1;
注入到了游戏中再调用该函数,在有的位置 可以正常使用,有的位置 就会报内存错误,或者Privileged instruction.
不注入时,直接调用不出错.
大家帮忙分析下.谢谢!
VC声明:
extern "C" char* _stdcall RecogniseToFile(char* key,char* Path)
DELPHI调用:
Function get1(key:PChar;Path:pchar):PChar;stdcall;external 'Decode.dll' name 'RecogniseToFile';
前边写错了.
而且在2个位置,1处正常用过后,2再用必报错.1不用,2用就正常.

应该是RecogniseToFile函数写的有问题,是否有资源没有释放,或者是有资源不该释放的被释放了。 参考技术A 在有的位置 可以正常使用,有的位置 就会报内存错误

这个不可能的吧,首先你的函数名称对应不上,get1/RecogniseToFile,这两个不同的名字,程序怎么可能得到函数指针

参数前家个var, get1(var key:PChar;var Path:pchar);试下。
参考技术B 我也认为是vc的那个RecogniseToFile函数写的有问题,如果只能调用一次,应该是在第1次调用后释放了不该释放的资源,那么再次调用就出错了

以上是关于delphi调用vc编写的dll,出现错误的主要内容,如果未能解决你的问题,请参考以下文章

delphi调用VC写的Dll报错

VB.net调用VC.net写的DLL出现“当前不会命中断点,还没有为该文档加载任何符号”!!急!急急!!!

delphi将pchar类型的变量传递给vc编写的dll问题,但是返回来的始终是一样的

halcon在VC++中,并生成dll文件,供MFC的EXE程序调用,dll中使用halcon函数出现报错

c#调用DELPHI的DLL出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏 请问在c#中怎么调用

如何在Delphi中调用VC6.0开发的COM