甲壳虫 发表于 2006-2-8 17:22

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

在写DLL时,如何使一个函数即可以在DLL内部被调用,又可以将其导出?高手知道说一下[em03]

冰镇柠檬汁儿 发表于 2006-2-8 17:46

[em09]你的意思是要把.dll文件打开吗?好像有专门的软件,但是我不知道,有这个必要吗?

甲壳虫 发表于 2006-2-8 17:59

<P>不是的,就比如这样:<br><br>DLL里的有这样两个函数:<br>int add(int a, int b)<br>{<br>.......<br>    sub(c,d);<br>........<br>}<br><br>int sub(int c,int d)<br>{<br>........<br>}<br><br><br>而在要导出的函数中都有<br>add<br>sub<br>//sub即可以在DLL内部让add使用,又可以和add一起导出给.exe使用,<br>我在VC中,做不了,如果要导出,内部就不能调用,我觉得应该有这个功能,但找不到<br><br></P>
[align=right][color=#000066][此贴子已经被作者于2006-2-8 17:59:43编辑过][/color][/align]

冰镇柠檬汁儿 发表于 2006-2-8 18:23

<P>好像不能吧,可能是因为类的缘故</P>

甲壳虫 发表于 2006-2-8 19:07

<P>哦,那只能另找办法了,谢谢版主热心帮助[em28]</P>

甲壳虫 发表于 2006-2-9 01:25

<P>经过多次验证,在VC中 ,如下程序在无论MFC DLL下,还是非MFC DLL下都是可行的,<BR>都可以导出正确的 add和sub函数<BR>_______dll.edf文件______<BR>EXPORTS<BR>add<BR>sub<BR><BR>_______dll.h文件_________<BR>extern int __declspec(dllexport)add(int,int);<BR>extern int __declspec(dllexport)sub(int,int);<BR><BR>_______dll.cpp文件_______<BR>#include"dll.h"<BR>int add(int a,int b)<BR>{<BR>    return sub(a,b)+b;<BR>}<BR><BR>int sub(int a,int b)<BR>{<BR>    return a-b;<BR>}<BR><BR>问题在于如果把int 换成CString,虽然可以正确生成dll,导出函数<BR>但存在两方面问题<BR>  1.如果CString 对象参与了运算,在exe使用时就一定会发生错误报告;<BR>如:就连这个简单的函数也不行<BR>CString outself(CString szText)<BR>{<BR>   return szText;<BR>}//其为DLL内要导出的函数<BR><BR>2.如果CString 对象没有参与运算,当函数返回类型为CString 时,返回一定要<BR>大于等于两个字节<BR>如:<BR>CString out()<BR>{<BR>    return "w";<BR>}//在exe使用中就会发生错误报告<BR><BR><BR>CString out()<BR>{<BR>    return "ww";<BR>}//不会发生错误报告<BR><BR>鄙人刚学,弄了一整天,百思不得解,是不是我在写DLL时别的代码没有完整所致,真不知道是什么回事?望高手指点[em13]<BR></P>

冰镇柠檬汁儿 发表于 2006-2-9 08:29

用String型可以吗?

页: [1]

编程论坛