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