delphi接口定义: 
Function ZWConnect(PBuff: PChar):word;cdecl;export; vc6.0中代码:
CString sDllName="delphi.dll" 
 
typedef int (CALLBACK* ZWConnect)(char* pcParam);HINSTANCE hInstance; 
CString strParam; 
strParam.Empty(); hInstance = LoadLibrary(sDllName); 
if(hInstance!=NULL) 

    ZWConnect  zwConnect; 
    zwConnect = (ZWConnect)GetProcAddress(hInstance,"ZWConnect"); 
    zwConnect((LPSTR)(LPCTSTR)strParam); 
} FreeLibrary(hInstance); 说明:
1、在debug和release配置下,能够正常调用和返回值,但是FreeLibrary(hInstance)会报错并退出程序,debug模式下错误提示为:the thread 0xFEC has exited with code -1073741571。
2、把VC中函数定义中的CALLBACK取消后过程和结果与原来完全相同;
3、换用char或者char*类型参数,并分配足够大内存(3000),结果与原来相同,在FreeLibrary处报错;
4、PBuff在delphi中应该被修改过,因为调用结束后参数会返回一个有意义的值

解决方案 »

  1.   

    FreeLibrary(hInstance);应该放在if语句里面吧,
    如果LoadLibrary(sDllName);不成功也FreeLirary那就报错了
      

  2.   

    楼上说的有道理,但是这里肯定是加载成功的,因为调用的功能都能执行,只是在FreeLibrary时出的错
      

  3.   

    用的是回调函数,那么查查是否有资源问题,内存问题等。
    利用回调函数处理delhpi提供的数据,处理时有没有问题?会不会不小心把指针给改了?这类问题最好是联调。
      

  4.   

    如果不用callback也是同样的现象
      

  5.   

    -1073741571错误是栈溢出,系统默认的栈空间大小是1MB,看看你是不是分配的大量局部动态变量或数组,改成用new分配。另外以前提过几个地方也是要改的。
      

  6.   

    主要检查两方面:一方面是看各个函数中是否定义了大数组(几KB的不算大),如果有就该成用new分配;另一方面看各个类的定义中有没有大数组,如果有这样的类,不要用该类定义局部变量动态,改成用new构造对象。
      

  7.   

    CString strParam;
    strParam.Empty(); 你不可以在DELPHI编写的函数中,使用强制指针转化的方法用CString strParam,这是个错误的用法
    应该使用 char sbuff[]这样的方法
    并在调用前先 memset(sbuff ,0 ,xxx);你确定那个DLL没问题?如果换用 char 数组进去释放时还出问题,
    那怎么看都象是DLL调用自释放函数或者你调用的函数本身发生了错误,而不是调用方的问题
      

  8.   

    delphi接口定义: 
    Function ZWConnect(PBuff: PChar):word;cdecl;export; vc6.0中代码: 
    CString sDllName="delphi.dll" typedef int (CALLBACK* ZWConnect)(char* pcParam); cdecl   由调用者清除堆栈
    stdcall   由被调的函数清除堆栈   CALLBACK是stdcall或者你被delphi部分,或者改调用部分typedef int (__cdecl* ZWConnect)(char* pcParam);