两三天了,这个问题一直困扰着我,铛铛铛的报错也听习惯,难道我的人生真就这么失败吗?
叮!
了解,这句话通过。
进入正题:VC2008/CLR程序下是可以静态调用自写DLL,只要有dll.h/dll.lib/dll.dll这三个文件就可以方便的调用。关键是这三个文件要真的很规范。尤其是头文件。我把例子代码放出。只有两个工程文件。dll.h和dll.cpp
//////////////////////////////////////////
///////////////////////////////////////////
//////////////////////////////////////////
dll.h
#ifndef _DLLTUT_DLL_H_ #define _DLLTUT_DLL_H_ // Make our life easier, if DLL_EXPORT is defined in a file then DECLDIR will do an export // If it is not defined DECLDIR will do an import #if defined DLL_EXPORT #define DECLDIR _declspec(dllexport) #else #define DECLDIR _declspec(dllimport) #endif // Specify "C" linkage to get rid of C++ name mangeling extern "C" { // Declare 2 functions ////////////////////////////别的什么你都不用看懂,非想看懂,就自己网上查吧, ///////////////////////////你只要在下面加入你要导出的函数或类就可了。 DECLDIR int add(int a,int b); DECLDIR int sub(int a,int b); } // End the inclusion guard #endif
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
dll.cpp
/////////切记,下面这两个#的顺序千万不要放错,是有先后的。
#define DLL_EXPORT #include "dll1.h" extern "C" { DECLDIR int add( int a, int b ) { return a+b; } DECLDIR int sub(int a,int b) { return a-b; } }
/////////////////////////////////////////////////////////////////
生成,找到 dll.lib/dll.dll,再加上头文件dll.h
把这三个文件放到你的工程目录下
在你的代码最前面加入下面两条代码
#include "dll.h" #pragma comment( lib, "dll.lib" )
OK,现在,你可以直接在你的程序空间中使用DLL中定义的函数和类了。
当然,要想通过编译,你要把编译器改成混合的,什么?你不知道?
OK 项目-> 项目属性-> 配置属性-> 常规-> 公共语言运行库支持 中选择公共语言运行库支持(/clr)
其实使用API也是这样的。
#include <windows.h> #pragma comment( lib, "user32.lib" )
这样你就可以用了,也许还要加::全局,谁知道呢。自已试吧。
咱这代码可是通过工程验证的,在此留个记录,以备日后之用。
其实也没什么,这些在网上都有,只是没人愿意像我这样啰嗦一下。希望能对一些朋友有所帮助,别像我这样空忙了两三天。