dllA中动态调另外一个dllB,在调用了dllB中的函数后,就无法用return返回数据了,代码如下:
extern "C"   __declspec(dllexport) int OpenSerial(int intA)  
{
typedef int(_cdecl *Connect1)(char *port);   
HINSTANCE hinstDLL=NULL; 
hinstDLL=LoadLibrary("IC500.dll");          //加载dll
if (hinstDLL)
{
Connect1 Proc;
Proc = (Connect1)GetProcAddress(hinstDLL,"OpenCom"); 
int intRet=Proc("COM1");
FreeLibrary(hinstDLL);      //释放
return 12;
AfxMessageBox("in FrDll2 OpenSerial step  1");
if (intRet!=0)     return(intRet);
AfxMessageBox("in FrDll2 OpenSerial step  2");

}通过加messagebox,断定OpenCom已经运行。
1 如果把return放在调用dllB的”Proc("COM1");“之前,就返回成功,之后,就包“内存不能读。
2 如果dllB中被调用的函数中不需要参数传入,则在那里都可以返回成功。
3 我是用vb调的dllA。
请指点

解决方案 »

  1.   

    改成这样
    char procParam[5];
    procParam[0]='C';
    procParam[1]='O';
    procParam[2]='M';
    procParam[3]='1';
    procParam[4]=0;int intRet = Proc(procParam);因为直接"COM1"是常量,该地址在编译的时候就确定了。如果你加在另外一个dll,那么它就会在他那边的常量去找这个东西。于是就不可读了