dll的菜鸟问题

berniechen0123 2006-04-26 09:52:21
// SampleApp.cpp
//

#include "stdafx.h"
#include "sampleDLL.h"




int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
typedef VOID (*DLLPROC) (LPTSTR);

HINSTANCE hinstDLL;
DLLPROC HelloWorld;
BOOL fFreeDLL;

hinstDLL = LoadLibrary("SampleDLL.dll");
if (hinstDLL != NULL)
{
HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld");
if (HelloWorld != NULL)
(HelloWorld);
else
{
MessageBox( NULL, TEXT("error"), TEXT("In a app"), MB_OK);
}

fFreeDLL = FreeLibrary(hinstDLL);
}
return 0;
}

// SampleDLL.cpp
//

#include "stdafx.h"
#define EXPORTING_DLL
#include "SampleDLL.h"

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{

return TRUE;
}

void HelloWorld()
{
MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK);
}

// SampleDLL.def
//
LIBRARY "SampleDLL"

EXPORTS
HelloWorld

sampleapp是一个工程,dll是一个工程,在同一个workspace下面
build app.exe没有出错,但是run的时候什么也不出,请帮忙看一下
...全文
113 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
windcsn 2006-04-26
  • 打赏
  • 举报
回复
typedef void (WINAPI * DLLPROC)();
DLLPROC pHelloWorld;
pHelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld");有问题D
pHelloWorld();
windcsn 2006-04-26
  • 打赏
  • 举报
回复
你定义的函数指针原形不对啊
berniechen0123 2006-04-26
  • 打赏
  • 举报
回复
HelloWorld();

d:\bernie\sampledll\sampleapp.cpp(26) : error C2198: 'void (__cdecl *)(char *)' : too few actual parameters

改成HelloWorld();报的是上面那个错

dll文件我拷到exe文件目录下面了,刚才忘说了
monkey8816 2006-04-26
  • 打赏
  • 举报
回复
hinstDLL = LoadLibrary("SampleDLL.dll");这句说明被调用的动态库是和.exe文件在同一个目录下的,所以要把dll拷到和exe同一目录。或者比如说,你的动态库在C://SampleDLL,目录中,则代码改为:hinstDLL = LoadLibrary("c;/SampleDLL/SampleDLL.dll");
windcsn 2006-04-26
  • 打赏
  • 举报
回复
(HelloWorld);//<--------这里可以过吗,应该是HelloWorld();吧
windcsn 2006-04-26
  • 打赏
  • 举报
回复
另外你
HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld");有问题D
DLLPROC是什么东西?
至少应该这样:
typedef void (WINAPI * DLLPROC)();
DLLPROC HelloWorld;
windcsn 2006-04-26
  • 打赏
  • 举报
回复
if (HelloWorld != NULL)
(HelloWorld);//<--------这里可以过吗,应该是HelloWorld吧
else
{
MessageBox( NULL, TEXT("error"), TEXT("In a app"), MB_OK);
}

fFreeDLL = FreeLibrary(hinstDLL);
}
return 0;
kongguangming 2006-04-26
  • 打赏
  • 举报
回复
把dll拷到和exe同一目录。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧