将CVI程序打包成DLL,在VC中调用时出现的问题!(已经解决)
本帖最后由 xz_guan 于 2010-3-9 20:01 编辑将CVI程序打包成DLL,在VC中调用,调用后,DLL会显示程序面板。
现在的问题是,可以编译生成DLL,无报错,但编译主程序时,显示如下错误:
The callback function, TransmitCB, specified in the UIR file, is not a known function. If you are using an external compiler, you must include the UIR callbacks object or source file in the executable or DLL
allqq-mogudiandian-44all各位有没有碰到过这样的问题呢? 你先在cvi中调用你生成的dll,测试看是否成功。如果成功,就是在VC中调用的问题。先测试通过再说。有没有将UIR文件也打包到DLL中呢? 本帖最后由 xz_guan 于 2010-3-9 16:16 编辑
将UIR文件打包进dll了,出问题的提示信息是这样的:
源文件中调用的函数:
int __stdcall browsedll(void) //在头文件中有申明为导出函数
{
if ((panelHandle = LoadPanelEx (0, "browse client.uir", PANEL,__CVIUserHInst))< 0)
return -1;
CmtNewThreadPool (5, &poolHandle);
DisplayPanel (panelHandle);
SetSleepPolicy(VAL_SLEEP_MORE);
SetActiveCtrl (panelHandle, PANEL_STRING);
RunUserInterface ();
/*DisconnectFromTCPServer (g_hconversation1);*/
DiscardPanel (panelHandle);
CloseCVIRTE();/*释放dll所占用的内存*/
return 0;
}
int __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
if (InitCVIRTE (hinstDLL, 0, 0) == 0)
return 0; /* out of memory */
break;
case DLL_PROCESS_DETACH:
CloseCVIRTE ();
break;
}
return 1;
}
int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
/* Included for compatibility with Borland */
return DllMain (hinstDLL, fdwReason, lpvReserved);
}
VC++中调用DLL的程序代码:
HINSTANCE hDLL; // Handle to DLL
void Ccvitestctr::InitDll()
{
typedef int (CALLBACK* LPFNDLLFUNC1)(void);
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
int uReturnVal;
hDLL = LoadLibrary("browseclient.dll");
::MessageBox(NULL,"动态库!", "提示信息", MB_OK | MB_ICONINFORMATION);
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "browsedll");
if (!lpfnDllFunc1)
{
::MessageBox(NULL,"加载动态库不成功!", "提示信息", MB_OK | MB_ICONINFORMATION);
// handle the error
FreeLibrary(hDLL);
}
else
{
// call the function
uReturnVal = lpfnDllFunc1();
}
}
else
{
::MessageBox(NULL,"调用动态库不成功!", "提示信息", MB_OK | MB_ICONINFORMATION);
}
}
最后是打包成CAB,放在网页中使用
CVI的界面可以显示出来,但是提示调用回调函数出错,不知是什么原因。求指教~
页:
[1]