如果你使用的是VISUAL STUDIO
1、从“文件”菜单中,选择“新建”,然后选择“项目…”。
2、从“项目类型”窗格中选择“Visual C++”下的“Win32”。
3、从“模板”窗格中,选择“Win32 控制台应用程序”。
4、为项目选择一个名称,如“MathFuncsDll”,并将其输入“名称”字段。为解决方案选择一个名称,如“DynamicLibrary”,并将其输入“解决方案名称”字段。
5、按“确定”启动 Win32 应用程序向导。在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。
6、从“Win32 应用程序向导”中的“应用程序设置”页中,选择“应用程序类型”下的“DLL”(如果可用),或者选择“控制台应用程序”(如果“DLL”不可用)。某些版本的 Visual Studio 不支持使用向导创建 DLL 项目。您可以稍后对此进行更改,以将项目编译为 DLL。
7、从“Win32 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”。
如果你选择的是VC6.0那么你选择选择MFC AppWizdra(DLL)直接就可以生成
C#调用C++的Dll文件添加[DllImport("CSharpInvokeCPP.CPPDemo.dll")]就可以如果还不清楚可以参考这个网页http://www.soaspx.com/dotnet/csharp/csharp_20110406_7469.html
先建立MFC DLL工程,然后写你控制台的程序,下面给个简单的例子你看看
// exercise.cpp : 定义 DLL 应用程序的入口点。
//
#include "stdafx.h"
#include
#ifdef _MANAGED
#pragma managed(push, off)
#endif
__declspec(dllexport) void f() // 定义你需要使用的函数
{
MessageBox(0, L"this is function f", 0, 0); // 弹出消息窗口
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
引入这个动态库,你就可以调用里面的 f 函数了,C#我不懂,但在C++里可以这样调用
// dll.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
__declspec(dllimport) void f();
#pragma comment(lib, "exercise.lib")
int _tmain(int argc, _TCHAR* argv[])
{
f();
return 0;
}
执行这段代码就可以调用那个动态库里面的 f 函数弹出消息窗口
如果使用的是VISUAL STUDIO:
1、从“文件”菜单中,选择“新建”,然后选择“项目…”.
2、从“项目类型”窗格中选择“Visual C++”下的“Win32”.
3、从“模板”窗格中,选择“Win32 控制台应用程序”.
4、为项目选择一个名称,如“MathFuncsDll”,并将其输入“名称”字段.为解决方案选择一个名称,如“DynamicLibrary”,并将其输入“解决方案名称”字段.
5、按“确定”启动 Win32 应用程序向导.在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”.
6、从“Win32 应用程序向导”中的“应用程序设置”页中,选择“应用程序类型”下的“DLL”(如果可用),或者选择“控制台应用程序”(如果“DLL”不可用).某些版本的 Visual Studio 不支持使用向导创建 DLL 项目.您可以稍后对此进行更改,以将项目编译为 DLL.
7、从“Win32 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”.
百度一下,,,
【1】静态调用
把TestDLL.lib和TestDLL.dll拷贝到你的测试工程下
你的dll声明方法_declspec(dllexport)是想要静态调用dll,所以需要添加如下代码:
//*/
#pragma#pragma comment(lib,"TestDLL.lib") /*(1)包含库文件,不写这句话,就需要通过程序配置包含这个库*/
_declspec(dllimport) int clFun(int a, int b);/*(2)声明函数是从dll中调用的,不写这句话,就需要包含头文件头文件*/
void main()
{
int a = 1,b = 2,c =0;
c = clFun(a,b);
}
/*
【2】动态调用
你想用LoadLibrary方法,就属于动态调用,这时可以不加你的声明_declspec(dllexport),只需要在TestDLL工程目录下的.def文件中把你要调用的函数名加进去
【
; TestDLL.def : 声明 DLL 的模块参数。
LIBRARY "TestDLL"
EXPORTS
; 此处可以是显式导出
clFun
】
接下来TestDLL.dll拷贝到你的测试工程下,添加如下代码:
//*/
void main()
{
int a = 1,b = 2,c =0;
//定义一个函数指针函数指针
typedef int (* Any_name)(int param1, int param2);
//定义一个函数指针变量指针变量
Any_name pfFuncInDll = NULL;
//加载dll
HINSTANCE hinst=LoadLibrary(L"TestDLL.dll");
if ( hinst != NULL )
{
//找到dll的clFun函数
pfFuncInDll = (Any_name)GetProcAddress(hinst, "clFun");
//调用dll里的函数
if (pfFuncInDll != NULL )
{
c = pfFuncInDll(a,b);
}
FreeLibrary(hinst);
}
}