游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1782|回复: 4

关于DLL

[复制链接]

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2004-2-20 21:24:00 | 显示全部楼层 |阅读模式
这个程序怎么了?为什么我找不到导入的函数?

client:
#include"stdafx.h"


//extern "C" void printstr(int option);
typedef void (*MYFUNCTION)(int);

int main(void)
{
        HINSTANCE hDll=LoadLibrary("impdll.dll");
        if(!hDll)
        {
                cout<<"Error loading dll! ";
                return -1;
        }
        MYFUNCTION myfunc=(MYFUNCTION)::GetProcAddress(hDll,"printstr");
        if(!myfunc)
        {
                cout<<"Error finding process address! ";
                ::FreeLibrary(hDll);
                return -1;
        }
        cout<<&quotlease set your choice:";
        int a;
        cin>>a;
        myfunc(a);
        ::FreeLibrary(hDll);
        return 0;
}
DLL:
#include "stdafx.h"


__declspec(dllexport) void printstr(int a);


BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
    return TRUE;
}

void printstr(int a)
{
        switch(a)
        {
        case 1:
                cout<<"1 received!!"<<endl;
                break;
        case 2:
                cout<<"2 received!!"<<endl;
                break;
        case 3:
                cout<<"3 received!!"<<endl;
                break;
        case 4:
                cout<<"4 received!!"<<endl;
                break;
        default:
                cout<<"default received!!"<<endl;
                break;
        }
}
编译链接,结果为:Error finding process address!

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-2-21 01:44:00 | 显示全部楼层

Re:关于DLL

看你的代码很简单明了,应该是没有什么问题的呀?你用导入库能用吗?是否是载入DLL的路径有问题呢?

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-2-21 05:57:00 | 显示全部楼层

Re:关于DLL

想到一个可能的原因,函数的名字被mangling了,所以你用"printstr"无法取得指针,你在DLL的
__declspec(dllexport) void printstr(int a);

改为

extern "C" __declspec(dllexport) void printstr(int a);

试试看。

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2004-2-21 17:14:00 | 显示全部楼层

Re:关于DLL

extern "C" __declspec(dllexport) void printstr(int a);
这个东西完全正确!!!!
谢谢了!

13

主题

145

帖子

149

积分

注册会员

Rank: 2

积分
149
发表于 2004-2-25 13:17:00 | 显示全部楼层

Re:关于DLL

mangling什么意思?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-14 17:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表