读书人

关于动态链接库编写的有关问题

发布时间: 2012-03-17 19:06:28 作者: rapoo

关于动态链接库编写的问题
小弟刚刚学习如何编写动态链接库。遇到一个问题。就是为什么在头文件里编写声明的时候总是要使用extern "C"这样的声明方式。我百度以后得知这是告知编译器使用C方式编译,但这样就导致了不能编写重载的函数了。我如果去掉了"C",然后动态调用这个DLL中的函数时返回结果总是0x00000000。代码贴上,求各位大侠帮忙看看。
dllcall.cpp:
#include<iostream>
#include <windows.h>
using std::cout;
using std::endl;

typedef int(*lpAddFun)(int, int);

int main()
{
HINSTANCE hDll; //DLL句柄
lpAddFun addFun;
hDll = LoadLibrary(TEXT("dlibtest.dll"));
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, "add");

if(addFun != NULL)
{
int result = addFun(1,2);
cout<<"result:"<<result<<endl;
}
}

}
dlibtest.h:
#ifndef DLIBTEST_H
#define DLIBTEST_H

extern "C" int __declspec(dllexport)add(int x, int y);//声明一
//extern int __declspec(dllexport)add(int x, int y);//声明二

#endif

dlibtest.cpp:
#include "dlibtest.h"
int add(int x,int y)
{
return x+y;
}


以上是代码了。如果换成了采用第二个声明就会返回值没NULL,第一个声明就可以正常执行。
那这样的DLL里头不是不能编写重载的函数了么??

[解决办法]
恩, 就是通过 lib 来调用 dll
但是不用 extern "C" 了.

读书人网 >C++

热点推荐