首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-17 
关于动态链接库编写的问题小弟刚刚学习如何编写动态链接库。遇到一个问题。就是为什么在头文件里编写声明的

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

热点排行