VC编写dll返回多个字符串给VB程序调用?
在C语言中函数的定义如下:
int Test(char * Cstr1,char * Cstr2)
{
strcpy(Cstr1,"aaaaaaaaaa");
strcpy(Cstr2,"bbbbbbbbbb");
return 0;
}
我在VB中如下声明:
Declare Function Test Lib "Test.dll" (ByRef Cstr1 As string,ByRef Cstr2 As string) As Integer
然后如下使用:
Dim rtn As Integer
Dim ls_str1,ls_str2 As String
rtn = Test(ls_str1,ls_str2)'调用dll函数 但是这里会出错,为什么会获取不到 aaaaaaaaaa和bbbbbbbbbb?
MsgBox ls_str1
MsgBox ls_str2
请各位指点一下!!
问题点数:20、回复次数:4Top
1 楼NOLA(无语)回复于 2006-03-07 16:53:42 得分 0
在Dll中函数不导出是不能被调用的Top
2 楼zhujiujun(<<<<<<<<动感光波>>>>>>>>)回复于 2006-03-07 20:45:26 得分 20
我也正在写dll给vb用,在C代码中必须申明为__stdcall,并且在DEF文件中导出
extern "C"
{
_declspec(dllexport) void __stdcall Clipboard_Backup();
_declspec(dllexport) void __stdcall Clipboard_Restore();
}
void __stdcall Clipboard_Backup()
{
theClipboard.Backup();
}
void __stdcall Clipboard_Restore()
{
theClipboard.Restore();
}
~~~~~~~~~~~~~~~~~~~~~~~~
DEF文件
LIBRARY ClipboardBackup
EXPORTS
Clipboard_Backup
Clipboard_Restore
Top
3 楼fangyc()回复于 2006-03-08 09:01:44 得分 0
多谢,zhujiujun!
这个我都已经声明过了,问题我现在已经解决了,前面加上 __stdcall并且要在参数上加上 2个** 才能正确调用!
正确如下:
int Test(char ** Cstr1,char ** Cstr2)
不过新的问题又出来了,为什么我在PB中不能调用这个动态库函数,不能返回值,而在VB中调用就能返回。
Vb调用
Dim ls_str1, as string * 20
Dim ls_str2 As String * 20
rtn = Test(ls_str1,ls_str2)//这样调用后可以得到 aaaaaaaaaa和bbbbbbbbbb?
PB调用
string ls_str1,ls_str2
ls_str1 = space(20)
ls_str2 = space(20)
rtn = Test(ls_str1,ls_str2)//却不能得到 aaaaaaaaaa和bbbbbbbbbb?
PB声明如下:
Function Integer Test (Ref String str1,Ref string str2) library "SmsApiDll.dll"
请高手指点
Top
4 楼fangyc()回复于 2006-03-08 12:54:24 得分 0
顶!Top




