Labwindows/CVI 调用外部 DLL 文件的问题 dll文件的编写 project新建一个工程*.prj,如图1所示。然后保存为example.prj。 图1 新建工程 Dllmain,然后软件会自动在c文件中添加以下两个函数: int __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 图2 添加函数流程 这两个函数是DLL动态链接库必须包含的两个函数,函数的具体内容为: #include 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); } 然后在上面C源文件中编写相关的函数,然后保存文件为example.c。如果需要编写的dll链接库具有现实面板的,则需要在c文件中做一些处理。一般利用Labwindows/CVI编写一个工程文件,在main函数中调用面板,具体代码如下: #include #include #include "CFI.h" static int panelHandle; int main (int argc, char *argv ) { if (InitCVIRTE (0, argv, 0) == 0) return -1;/* out of memory */ //调用DLL函数 InitUIForDLL (); return 0; } (2)通过一个按键来调用dll,即在一个工程中通过一个按钮来调取dll中的函数,来完成此按扭的功能。 与用c源代码来调用的方式一样,只是此工程已经有*.uir对象面板,在*.uir的面板上添加一个按钮,为按钮生成一个函数,在函数中调用外部dll中的函数。在编译前,要将*.lib和*.dll文件和头文件包含在工程中,并且将dll中的函数用一个*.h头文件包含: externint *****(int ***); 然后编译,编译的时候经常会出现一个错误按钮中调用的外部dll的函数没有被定义:undefined InitUIForDLL in the project。的错误。 此时按照下面的操作就可以完成。在Build options中的Defalt calling convention中选择_cdecl后,点击确定后,再编译就成功了!