dLL调用的问题 各位大虾: 我想调用一个由dll导出的类,需要将其中的函数定义为全局变量,定义一个导出的类,应该定义在那里?由该怎样调用? 另外:ZeroMemory()应在程序的那里启动? 谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考一下如何在Dll中导出class说明:新建两个工程,其中一个是dll工程(我的示例程序中这个工程名为DllClass),另一个是测试和使用dll的工程(名字为DllClassTest) 注意点: 1。Dll工程编译完成后,将.lib和.dll文件拷贝到测试和使用dll的工程的适当目录下(我的程序是release目录),然后将 Dll工程中的导出类的头文件(以下简称头文件)拷贝到测试和使用dll的工程的适当目录下(在我的程序中是拷贝到此工程文件所在目录),然后把这个拷贝过来的头文件通过下面2和3进行修改。 2。在Dll工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllexport) 表示导出 在测试和使用dll的工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllimport) 表示导入 3。不论Dll工程的头文件如何实现(比如说包括内联函数等等), 在测试和使用dll的工程中的头文件中全部都是声明而没有定义(即将类成员函数的实现部分去掉) 4。在测试和使用dll的工程的那个文件中包含对dll库的引入,分两步: 首先在是测试和使用dll的工程的setting菜单(按ALT+F7可以调出)中的LINK选项卡中的Object/Library modules:下填写对 dll的连接,比如dll文件名字为DllClass.lib和DllClass.dll,则填写 Release/DllClass.lib(注意目录,我的程序中.lib文件是在目录release下)。 然后,添加对头文件的包含,比如dll文件名字为DllClass.lib和DllClass.dll,头文件为DllClass.h,则包含头文件为 #include "DllClass.h" 由此,就可以使用了。相关源码如下:dll工程中的DllClass.h 内容://此处在dll的头文件中为 dllexport,在应用文件中为dllimport#define DLLCLASS_API __declspec(dllexport)//导出一个类(包括其方法、属性)class DLLCLASS_API CDllClass {public: CDllClass(void); void MSG(const char * const str);};dll工程中的DllClass.cpp内容:#include "stdafx.h"#include "DllClass.h"BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}CDllClass::CDllClass(){ return; }void CDllClass::MSG(const char * const str){ MessageBox(NULL,str,"",MB_OK);}Dll测试工程中的DllClass.h内容://此处在dll的头文件中为 dllexport,在应用文件中为dllimport#define DLLCLASS_API __declspec(dllimport)//导出一个类(包括其方法、属性)class DLLCLASS_API CDllClass {public: CDllClass(void); void MSG(const char * const str);};Dll测试工程中DllClassTest.cpp内容:首部:#include "DllClass.h"class DllClass;代码部分: CDllClass CTest; CTest.MSG("this is a string into dll"); 定义导出类很简单~class __declspec(dllexport) myclass{ ....} 1 __declspec(dllexport) 来定义你的类,在使用的时候用__declspec(dllimport)来定义2 ZeroMemory可以用来对数据进行初始化,可以在任何地方使用 请高人解答:VS2008中check box如何添加关联变量? ShellExecute(0,"print", "c:\\abc.txt","","", SW_HIDE); 如何去掉打印标题? 如何更改菜单栏下面的图标 结帖过年 求助delete CSocket;出错 Debug Assertion Failed File:sockcore.cpp 一道关于刷新的问题 谁有真正的EXE合并软件。 请问自定义消息是怎么回事?? 关于点对点的传输 一个关于VC和数据库的问题 知道窗口句柄如何取得其线程句柄? 关于播放声音文件与数据库
注意点:
1。Dll工程编译完成后,将.lib和.dll文件拷贝到测试和使用dll的工程的适当目录下(我的程序是release目录),然后将
Dll工程中的导出类的头文件(以下简称头文件)拷贝到测试和使用dll的工程的适当目录下(在我的程序中是拷贝到此工程文件所在目录),然后把这个拷贝过来的头文件通过下面2和3进行修改。 2。在Dll工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllexport) 表示导出
在测试和使用dll的工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllimport) 表示导入 3。不论Dll工程的头文件如何实现(比如说包括内联函数等等),
在测试和使用dll的工程中的头文件中全部都是声明而没有定义(即将类成员函数的实现部分去掉) 4。在测试和使用dll的工程的那个文件中包含对dll库的引入,分两步:
首先在是测试和使用dll的工程的setting菜单(按ALT+F7可以调出)中的LINK选项卡中的Object/Library modules:下填写对 dll的连接,比如dll文件名字为DllClass.lib和DllClass.dll,则填写 Release/DllClass.lib(注意目录,我的程序中.lib文件是在目录release下)。
然后,添加对头文件的包含,比如dll文件名字为DllClass.lib和DllClass.dll,头文件为DllClass.h,则包含头文
件为 #include "DllClass.h"
由此,就可以使用了。相关源码如下:
dll工程中的DllClass.h 内容:
//此处在dll的头文件中为 dllexport,在应用文件中为dllimport
#define DLLCLASS_API __declspec(dllexport)//导出一个类(包括其方法、属性)
class DLLCLASS_API CDllClass {
public:
CDllClass(void);
void MSG(const char * const str);
};dll工程中的DllClass.cpp内容:
#include "stdafx.h"
#include "DllClass.h"BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
CDllClass::CDllClass()
{
return;
}void CDllClass::MSG(const char * const str)
{
MessageBox(NULL,str,"",MB_OK);
}Dll测试工程中的DllClass.h内容:
//此处在dll的头文件中为 dllexport,在应用文件中为dllimport
#define DLLCLASS_API __declspec(dllimport)//导出一个类(包括其方法、属性)
class DLLCLASS_API CDllClass {
public:
CDllClass(void);
void MSG(const char * const str);
};
Dll测试工程中DllClassTest.cpp内容:
首部:
#include "DllClass.h"
class DllClass;代码部分:
CDllClass CTest;
CTest.MSG("this is a string into dll");
class __declspec(dllexport) myclass
{
....
}