VC调用VB的ACTIVE dll控件。在线急等,高手帮忙!解决思路
VC调用VB的ACTIVE dll控件。在线急等,高手帮忙!!!!!
用VB写了个ACTIVE.dll(名字是XTDSLIMPORTDATE.dll)
VB中写了下面的代码
ShowForm.class代码:
Private mvartest As Integer
Public Property Let test(ByVal vData As Integer)
mvartest = vData
End Property
Public Property Get test() As Integer
test = mvartest
End Property
Public Sub ShowLMForm()
Frm_AddDate.Show 1
End Sub
Frm_AddDate.form代码
Private mShowForm As New ShowForm
Private Sub CmdToCount_Click()
mShowForm.test = tTPartPicNO.Text
msgbox mShowForm.test
Exit Sub
handlerr:
Debug.Print Err.Description
End Sub
VC代码:
#import "C:\e-tech\Xtpdm35\pdm\XTDSLIMPORTDATE.dll " no_namespace
_ShowFormPtr showForm;
HRESULT showFormhr = showForm.CreateInstance(__uuidof(ShowForm));
showForm-> ShowLMForm();
//运行到上面都没有错误.vb中的ShowLMForm方法可以执行。
现在的问题是我如何才能实现vb中的Public Property Get test() As Integer这个方法
用showForm-> Gettest();获取编译可以通过但用quickwitch查看会有下面提示
CXX0063:ERROR:overloaded operator-> not supported
------解决方案--------------------
这是我做的一个例子。你参照一下。
VB6.0
Public Function MyVBFunction(x As Integer) As Integer
MsgBox x
End Function
Public Function MyVBFunction2(s As String) As String
MyVBFunction2 = s & "、返却値は文字列です。"
End Function
Public Function MyVBFunction3(x As Integer) As String()
Dim s(0 To 10) As String
s(0) = "12345"
s(1) = "67890"
s(2) = "ABCDE"
MyVBFunction3 = s
End Function
//////////////////////////////////////////////////////////
VC++6.0
#include <stdio.h>
#include <afx.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include "atlbase.h"
#include "comutil.h"
#import "c:\project1.dll" no_namespace
void main()
{
BSTR bstrDesc;
try
{
CoInitialize(NULL);
short st = 2;
short st1;
_bstr_t st2;
//_bstr_t st3[10];
SAFEARRAY *st3;
_Class1Ptr ptr;
ptr.CreateInstance(__uuidof(Class1));
//1.整数返却値
st1 = ptr->MyVBFunction(&st);
//2.文字列返却値
st2 = ptr->MyVBFunction2(&st);
CString s;
s.Format(_T("%s"), (LPCTSTR)st2);
printf(s);
printf("\n");
//3.文字列配列の返却値
st3 = ptr->MyVBFunction3(&st);
long lIndex;
BSTR szBSTRName;
for(lIndex=0;lIndex<3;lIndex++)
{
SafeArrayGetElement(st3, &lIndex, &szBSTRName);
::MessageBoxW( NULL, szBSTRName, L"てすと", MB_OK );
char charVal[10] = "";
WideCharToMultiByte(CP_ACP,0,szBSTRName,-1,charVal,10,NULL,NULL);
printf(charVal);
printf("\n");
}
}
catch(_com_error &e)
{
bstrDesc = e.Description();
}
CoUninitialize();
}
用VB写了个ACTIVE.dll(名字是XTDSLIMPORTDATE.dll)
VB中写了下面的代码
ShowForm.class代码:
Private mvartest As Integer
Public Property Let test(ByVal vData As Integer)
mvartest = vData
End Property
Public Property Get test() As Integer
test = mvartest
End Property
Public Sub ShowLMForm()
Frm_AddDate.Show 1
End Sub
Frm_AddDate.form代码
Private mShowForm As New ShowForm
Private Sub CmdToCount_Click()
mShowForm.test = tTPartPicNO.Text
msgbox mShowForm.test
Exit Sub
handlerr:
Debug.Print Err.Description
End Sub
VC代码:
#import "C:\e-tech\Xtpdm35\pdm\XTDSLIMPORTDATE.dll " no_namespace
_ShowFormPtr showForm;
HRESULT showFormhr = showForm.CreateInstance(__uuidof(ShowForm));
showForm-> ShowLMForm();
//运行到上面都没有错误.vb中的ShowLMForm方法可以执行。
现在的问题是我如何才能实现vb中的Public Property Get test() As Integer这个方法
用showForm-> Gettest();获取编译可以通过但用quickwitch查看会有下面提示
CXX0063:ERROR:overloaded operator-> not supported
------解决方案--------------------
这是我做的一个例子。你参照一下。
VB6.0
Public Function MyVBFunction(x As Integer) As Integer
MsgBox x
End Function
Public Function MyVBFunction2(s As String) As String
MyVBFunction2 = s & "、返却値は文字列です。"
End Function
Public Function MyVBFunction3(x As Integer) As String()
Dim s(0 To 10) As String
s(0) = "12345"
s(1) = "67890"
s(2) = "ABCDE"
MyVBFunction3 = s
End Function
//////////////////////////////////////////////////////////
VC++6.0
#include <stdio.h>
#include <afx.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include "atlbase.h"
#include "comutil.h"
#import "c:\project1.dll" no_namespace
void main()
{
BSTR bstrDesc;
try
{
CoInitialize(NULL);
short st = 2;
short st1;
_bstr_t st2;
//_bstr_t st3[10];
SAFEARRAY *st3;
_Class1Ptr ptr;
ptr.CreateInstance(__uuidof(Class1));
//1.整数返却値
st1 = ptr->MyVBFunction(&st);
//2.文字列返却値
st2 = ptr->MyVBFunction2(&st);
CString s;
s.Format(_T("%s"), (LPCTSTR)st2);
printf(s);
printf("\n");
//3.文字列配列の返却値
st3 = ptr->MyVBFunction3(&st);
long lIndex;
BSTR szBSTRName;
for(lIndex=0;lIndex<3;lIndex++)
{
SafeArrayGetElement(st3, &lIndex, &szBSTRName);
::MessageBoxW( NULL, szBSTRName, L"てすと", MB_OK );
char charVal[10] = "";
WideCharToMultiByte(CP_ACP,0,szBSTRName,-1,charVal,10,NULL,NULL);
printf(charVal);
printf("\n");
}
}
catch(_com_error &e)
{
bstrDesc = e.Description();
}
CoUninitialize();
}