/*-------------------------------------------------------------------------------------------------------*/
/*
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
#include <
windows.h>//需要的API函数实际在winbase.h中
定义#include /* Needed if linking in external compiler; harmless otherwise */
#include
#include
#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);
}
/*-------------------------------------------------------------------------------------------------------*/
点击
下载工程源码: cvidlldemo.rar
用户1177291 2010-12-16 10:40
用户1292686 2008-11-22 20:50
用户1006913 2008-5-29 11:17