创建的动态链接库好像不能调用,求大神看下什么有关问题
创建的动态链接库好像不能调用,求大神看下什么问题
//动态链接库中的test.h文件
#include "windows.h"
extern"C" _declspec(dllexport) int sum(int a,int b);
extern"C" _declspec(dllexport) int sub(int a,int b);
extern"C" _declspec(dllexport) int mul(int a,int b);
extern"C" _declspec(dllexport) int pdiv(int a,int b);
extern"C" _declspec(dllexport) void Message();
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// test.cpp文件
//
#include "test.h"
#include "windows.h"
extern"C" _declspec(dllexport) int sum(int a,int b)
{
return a+b;
}
extern"C" _declspec(dllexport) int sub(int a,int b)
{
return a-b;
}
extern"C" _declspec(dllexport) int mul(int a,int b)
{
return a*b;
}
extern"C" _declspec(dllexport) int pdiv(int a,int b)
{
return a/b;
}
extern"C" _declspec(dllexport) void Message()
{
OLECHAR *pWChar = L"这是动态链接库的消息";
OLECHAR *DL = L"DLL";
MessageBox(NULL,pWChar,DL,MB_OK);
}
编译提示: 是不是提示这样就成功创建动态链接库了??
1> 正在创建“Debug\TestDll.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>ClCompile:
1> test.cpp
1>Link:
1> 正在创建库 E:\Design\C++\TestDll\Debug\TestDll.lib 和对象 E:\Design\C++\TestDll\Debug\TestDll.exp
1>Manifest:
1> 正在删除文件“Debug\TestDll.dll.embed.manifest”。
1>LinkEmbedManifest:
1> TestDll.vcxproj -> E:\Design\C++\TestDll\Debug\TestDll.dll
1>FinalizeBuildStatus:
1> 正在删除文件“Debug\TestDll.unsuccessfulbuild”。
1> 正在对“Debug\TestDll.lastbuildstate”执行 Touch 任务。
1>
1>生成成功。
1>
1>已用时间 00:00:02.46
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
//创建另一个项目下的Cpp test1.cpp
#include <iostream>
#include<windows.h>
using namespace std;
typedef int(*sum)(int a,int b);
typedef int(*mul)(int a,int b);
void main(void)
{
sum Sum1=NULL;
mul Mul1=NULL;
HMODULE hDLL;
hDLL=LoadLibrary(L"TestDll.dll");//加载动态链接库TestDll.dll文件;
if(hDLL)
cout<<"good"<<endl;
else
cout<<"取出错误"<<endl;
Sum1=(sum)GetProcAddress(hDLL,"sum");
Mul1=(mul)GetProcAddress(hDLL,"mul");
if (Sum1)//如果取出函数成功,则执行下面的语句
{
int A=Sum1(5,8);
cout<<"比较的结果为"<<A;
}
else if(Mul1)
{
int B=Mul1(5,8);
cout<<"比较的结果为"<<B;
}
else cout<<"取出错误";
FreeLibrary(hDLL);//卸载TestDll.dll文件;}
}
执行后提示:取出错误 取出错误
刚开始学C++请多指教
------解决方案--------------------
导出的函数名字会被修饰
你用 dumpbin /exports 看看, 可能都有个 _ 开头,
//动态链接库中的test.h文件
#include "windows.h"
extern"C" _declspec(dllexport) int sum(int a,int b);
extern"C" _declspec(dllexport) int sub(int a,int b);
extern"C" _declspec(dllexport) int mul(int a,int b);
extern"C" _declspec(dllexport) int pdiv(int a,int b);
extern"C" _declspec(dllexport) void Message();
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// test.cpp文件
//
#include "test.h"
#include "windows.h"
extern"C" _declspec(dllexport) int sum(int a,int b)
{
return a+b;
}
extern"C" _declspec(dllexport) int sub(int a,int b)
{
return a-b;
}
extern"C" _declspec(dllexport) int mul(int a,int b)
{
return a*b;
}
extern"C" _declspec(dllexport) int pdiv(int a,int b)
{
return a/b;
}
extern"C" _declspec(dllexport) void Message()
{
OLECHAR *pWChar = L"这是动态链接库的消息";
OLECHAR *DL = L"DLL";
MessageBox(NULL,pWChar,DL,MB_OK);
}
编译提示: 是不是提示这样就成功创建动态链接库了??
1> 正在创建“Debug\TestDll.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>ClCompile:
1> test.cpp
1>Link:
1> 正在创建库 E:\Design\C++\TestDll\Debug\TestDll.lib 和对象 E:\Design\C++\TestDll\Debug\TestDll.exp
1>Manifest:
1> 正在删除文件“Debug\TestDll.dll.embed.manifest”。
1>LinkEmbedManifest:
1> TestDll.vcxproj -> E:\Design\C++\TestDll\Debug\TestDll.dll
1>FinalizeBuildStatus:
1> 正在删除文件“Debug\TestDll.unsuccessfulbuild”。
1> 正在对“Debug\TestDll.lastbuildstate”执行 Touch 任务。
1>
1>生成成功。
1>
1>已用时间 00:00:02.46
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
//创建另一个项目下的Cpp test1.cpp
#include <iostream>
#include<windows.h>
using namespace std;
typedef int(*sum)(int a,int b);
typedef int(*mul)(int a,int b);
void main(void)
{
sum Sum1=NULL;
mul Mul1=NULL;
HMODULE hDLL;
hDLL=LoadLibrary(L"TestDll.dll");//加载动态链接库TestDll.dll文件;
if(hDLL)
cout<<"good"<<endl;
else
cout<<"取出错误"<<endl;
Sum1=(sum)GetProcAddress(hDLL,"sum");
Mul1=(mul)GetProcAddress(hDLL,"mul");
if (Sum1)//如果取出函数成功,则执行下面的语句
{
int A=Sum1(5,8);
cout<<"比较的结果为"<<A;
}
else if(Mul1)
{
int B=Mul1(5,8);
cout<<"比较的结果为"<<B;
}
else cout<<"取出错误";
FreeLibrary(hDLL);//卸载TestDll.dll文件;}
}
执行后提示:取出错误 取出错误
刚开始学C++请多指教
c++
dll
,动态链接库
------解决方案--------------------
导出的函数名字会被修饰
你用 dumpbin /exports 看看, 可能都有个 _ 开头,