|

楼主 |
发表于 2010-3-9 16:15:51
|
显示全部楼层
本帖最后由 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的界面可以显示出来,但是提示调用回调函数出错,不知是什么原因。求指教~ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|