关于C++里编写与调用DLL文件的问题 10

最近我在学习用C++语言来编写DLL文件,并尝试在C++程序里调用DLL文件里的东西.我用的编译器是VS2008.首先,我的DLL文件里,主要有以下内容://DllTes... 最近我在学习用C++语言来编写DLL文件,并尝试在C++程序里调用DLL文件里的东西.我用的编译器是VS2008.首先,我的DLL文件里,主要有以下内容:
//DllTest.h
extern "C" void _declspec(dllexport) Fun();
//DllTest.cpp
#include "stdafx.h"
#include"stdio.h"
#include"DllTest.h"
void Fun()
{
printf("Fun()\n");
}
//dllmain.cpp
#include "stdafx.h"

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:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

接着是我的EXE工程:
//DllUseTest.cpp
#include "stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"

using namespace System;

int main(array<System::String ^> ^args)
{
HINSTANCE hDll;
hDll=LoadLibrary(TEXT("DllTest.dll"));
typedef void(*lpFun)();
lpFun Fun;
if(hDll!=NULL)
{
Fun=(lpFun)GetProcAddress(hDll,"Fun");//经测试,Fun最后为NULL!
if(Fun!=NULL)
{
Fun();
}
else
{
printf("Fun is null!\n");
}
}
else
{
printf("hDll is null!\n");
}

System::Console::ReadKey ();
return 0;
}
最后输出为Fun is null.为什么会这样呢?
hDll不为空,这测试过了.而且如果hDll为空,则最后输出结果应该是"hDll is null!"
展开
 我来答
gis19831203
2009-08-06 · TA获得超过690个赞
知道小有建树答主
回答量:914
采纳率:0%
帮助的人:835万
展开全部
使用GetLastError()查看错误代码.
或者将:extern "C" void _declspec(dllexport) Fun();
改为extern "C" _declspec(dllexport) void Fun();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
netkinghancong
2009-08-06 · TA获得超过1592个赞
知道小有建树答主
回答量:823
采纳率:100%
帮助的人:502万
展开全部
hDll=LoadLibrary(TEXT("DllTest.dll"));
在这句后面加一个assert(hdll)看看链接库是否加载进来了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式