简单的做测试,新建了一个win32的控制台程序,调用delphi写的dll,运行没什么错,但是没结果,断点发现加载LoadLibrary的时候句柄没有找到,如下:
#include "stdafx.h"
#include "windows.h"
typedef int (*Add)(int b,int c);int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hDll;
int a=0;
Add add;
hDll = LoadLibrary((LPCWSTR)("d:\\Pdll.dll")); 
if (hDll != NULL) 
   { 
     printf("success1!\n"); 
     add = (Add)GetProcAddress(hDll,"Add"); 
     if(add!=NULL) 
     { 
        printf("success2!"); 
        a=add(1,3);
if(a==4) {
  printf("4");
}
        
     } 
     FreeLibrary(hDll); 
     } 
return 0;
}dll文件可以用的,我用别的语言调用过的,没有问题。就是vc调用的时候hDll = LoadLibrary((LPCWSTR)("d:\\Pdll.dll")); 发现这里hdll的值为0x00000000。是什么问题?

解决方案 »

  1.   

    应该是导出函数定义和“typedef int (*Add)(int b,int c); ”不一样导致,如果delphi里是
    function add(b:integer;c:integer):longint cdecl 话,这里应写成“typedef int __cdecl(*Add)(int b,int c); ”;如果delphi中cdecl换成stdcall,这里应是“typedef int __stdcall(*Add)(int b,int c); ”,反正要对应。你试试吧!