http://www.china-askpro.com/msg13/qa91.shtml
http://support.microsoft.com/kb/q181578/
VB中,应注意以下几点:
- 声明DLL函数时,有返回值的声明为Function,无返回值声明为Sub,参数类型要一一对应,注意参数类型的字节数;
- 注意AddressOf运算符用法;
VC中,应注意以下几点:
- DLL输出函数应声明成“__stdcall”
- 声明回调函数指针时,注意“__stdcall”声明,示例:
VB:Sub ShowData(ByVal nData As Long)
VC:typedef VOID (__stdcall *FunPtr_VBCallback)(INT32)
因为这一点,VC函数调用该回调函数之后,VB IDE老是崩溃
vc写dll,我只会写int类型的函数:
__stdcall int CALLBACK CalcSum(int a,int b);
vb中可以声明:
Private declare Function MySum Lib "d:MyDLL.dll" (ByVal S As Integer, ByVal D As Integer) As Integer
这样就可以在vb中使用了,可是我现在想在dll中写一个能够返回字符串的函数,并用vb的label控件把函数返回的字符串显示出来,请问dll里怎么写?vb里怎么声明?label控件怎么调用它?如能解决,立即给分,恳请大家帮帮忙!
回复1:
__stdcall int CALLBACK CalcSum(int a,int b,char *c);
vb中可以声明:
Private declare Function MySum Lib "d:MyDLL.dll" (ByVal S As Integer, ByVal D As Integer, ByRef c as string) As Integer
回复2:
BSTR/VARANT
回复3:
用BSTR
CString::AllocSysString
BSTR AllocSysString ( ) const;
throw( CMemoryException );
Return Value
Points to the newly allocated string.
或者
SysAllocString
BSTR SysAllocString(
OLEchar FAR* sz
);
回复4:
__stdcall char * CALLBACK CalcSum(int a,int b);
在vb中定义函数的返回值就字符串类型或者字符指针就可以了。。。
回复5:
vc寫dll,vb 調用,有趣。
回复6:
BSTR, RETVAL, ByRef
回复7:
试试:
VB中String转换为VC中的BSTR,只要把参数类型改了就可以了,但要注意使用ByRef
回复8:
http://support.microsoft.com/kb/187912

本文介绍了使用Visual Basic (VB) 和 Visual C++ (VC) 进行DLL交互的方法,包括如何正确声明函数、处理不同类型的数据传递及回调函数。特别关注了字符串返回值的处理技巧。
4619

被折叠的 条评论
为什么被折叠?



