注册 登录
编程论坛 VC.NET论坛

[求助]在写DLL时,如何使一个函数即可以在DLL内部被调用,又可以将其导出?

甲壳虫 发布于 2006-02-08 17:22, 1511 次点击
在写DLL时,如何使一个函数即可以在DLL内部被调用,又可以将其导出?高手知道说一下
6 回复
#2
冰镇柠檬汁儿2006-02-08 17:46
你的意思是要把.dll文件打开吗?好像有专门的软件,但是我不知道,有这个必要吗?
#3
甲壳虫2006-02-08 17:59

不是的,就比如这样:

DLL里的有这样两个函数:
int add(int a, int b)
{
.......
sub(c,d);
........
}

int sub(int c,int d)
{
........
}


而在要导出的函数中都有
add
sub
//sub即可以在DLL内部让add使用,又可以和add一起导出给.exe使用,
我在VC中,做不了,如果要导出,内部就不能调用,我觉得应该有这个功能,但找不到

[此贴子已经被作者于2006-2-8 17:59:43编辑过]

#4
冰镇柠檬汁儿2006-02-08 18:23

好像不能吧,可能是因为类的缘故

#5
甲壳虫2006-02-08 19:07

哦,那只能另找办法了,谢谢版主热心帮助

#6
甲壳虫2006-02-09 01:25

经过多次验证,在VC中 ,如下程序在无论MFC DLL下,还是非MFC DLL下都是可行的,
都可以导出正确的 add和sub函数
_______dll.edf文件______
EXPORTS
add
sub

_______dll.h文件_________
extern int __declspec(dllexport)add(int,int);
extern int __declspec(dllexport)sub(int,int);

_______dll.cpp文件_______
#include"dll.h"
int add(int a,int b)
{
return sub(a,b)+b;
}

int sub(int a,int b)
{
return a-b;
}

问题在于如果把int 换成CString,虽然可以正确生成dll,导出函数
但存在两方面问题
1.如果CString 对象参与了运算,在exe使用时就一定会发生错误报告;
如:就连这个简单的函数也不行
CString outself(CString szText)
{
return szText;
}//其为DLL内要导出的函数

2.如果CString 对象没有参与运算,当函数返回类型为CString 时,返回一定要
大于等于两个字节
如:
CString out()
{
return "w";
}//在exe使用中就会发生错误报告


CString out()
{
return "ww";
}//不会发生错误报告

鄙人刚学,弄了一整天,百思不得解,是不是我在写DLL时别的代码没有完整所致,真不知道是什么回事?望高手指点

#7
冰镇柠檬汁儿2006-02-09 08:29
用String型可以吗?
1