关于动态链接库编写的问题
小弟刚刚学习如何编写动态链接库。遇到一个问题。就是为什么在头文件里编写声明的时候总是要使用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" 了.