⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple.c

📁 LabWindows/CVI调用DLL实用例程(菜农HotPower)
💻 C
字号:
/*-------------------------------------------------------------------------------------------------------*/	
/*				LabWindows/CVI调用DLL实用例程(菜农HotPower)                                              */
/*  本例程是在CVI自带的simple添加调用mydll.dll的函数MyDLLCdeclFunction()                                 */
/*  网上和CVI的例程很少,一般为调用LIB实例,但很多dll都是以*.dll提供的,故本例程很实用。                    */
/*  本例程主要是调用了三个Windows API函数LoadLibrary(),GetProcAddress(),FreeLibrary()                    */
/*  菜农HotPower@126.com  2008.5.27  于西安大雁塔菜地                                                    */
/*-------------------------------------------------------------------------------------------------------*/	

/* This is a simple project that will call
 * functions from an external DLL */
//#define  __cplusplus 

#include <stdio.h> 
#include <windows.h>//需要的API函数实际在winbase.h中定义

#include <cvirte.h>    /* Needed if linking in external compiler; harmless otherwise */
#include <formatio.h>
#include <userint.h>
#include "mydll.h"

/*-------------------------------------------------------------------------------------------------------*/	
typedef long int DLLEXPORT (*DLLCdeclFunction)(char *);//定义函数指针 
/*-------------------------------------------------------------------------------------------------------*/	

int status;
char message[80];

int main (int argc, char *argv[])
{
/*-------------------------------------------------------------------------------------------------------*/	
    HMODULE hinstLib; 
    DLLCdeclFunction DLLFunction; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 
/*-------------------------------------------------------------------------------------------------------*/	

    if (InitCVIRTE (0, argv, 0) == 0)    /* Needed if linking in external compiler; harmless otherwise */
        return -1;    /* out of memory */
    /* Tell the dll to run it's user interface */
    RunDllUI();
	
/*-------------------------------------------------------------------------------------------------------*/	
   // Get a handle to the DLL module. 
    hinstLib = LoadLibrary("mydll.dll");//装载动态链接库mydll.dll 
   // If the handle is valid, try to get the function address. 
    if (hinstLib != NULL)//成功装载动态链接库mydll.dll  
    { 
       DLLFunction = (DLLCdeclFunction)GetProcAddress(hinstLib, (LPCSTR)"MyDLLCdeclFunction");//取函数指针地址 

             // If the function address is valid, call the function. 
       if (fRunTimeLinkSuccess = (DLLFunction != NULL))//dll中有函数MyDLLCdeclFunction() 
	   {
            Fmt(message, "message via DLL function\n"); 
            status = (long int)DLLFunction (message);//调用dll函数!!! 
	   }
             // Free the DLL module 

       fFreeResult = FreeLibrary(hinstLib);//卸载动态链接库mydll.dll 
    } 
    // If unable to call the DLL function, use an alternative 
    if (! fRunTimeLinkSuccess) 
	{
       Fmt(message, "message via alternative method\n"); 
	   MessagePopup ("CVI MessagePopup ", message);     
	}
/*-------------------------------------------------------------------------------------------------------*/	

	

    /* Call the Stdcall Style DLL Function */
    status = MyDLLStdcallFunction("Text buffer 1 being passed from CVI to DLL");
    
    /* Display returned value from DLL function */
    Fmt(message, "MyDLLStdcallFunction status returned: %i", status);
    MessagePopup ("CVI MessagePopup ", message);
    

    /* Call the Cdecl Style DLL Function */
    status = MyDLLCdeclFunction("Text buffer 2 being passed from CVI to DLL");
    
    /* Display returned value from DLL function */
    Fmt(message, "MyDLLCdeclFunction status returned: %i", status);
    MessagePopup ("CVI MessagePopup ", message);

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -