从c++调用vb.net-comvisible dll内部的函数
Calling functions inside a vb.net-comvisible dll from c++
我在vb.net(vs 2012)中编写了一个dll,使类和函数可见。像这样:
Imports System
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
<ComClass(InterFc.ClassId, InterFc.InterfaceId, InterFc.EventsId)> _
Public Class InterFc
Public Const ClassId As String = "553CCD79-3067-44DE-B1AD-36A153F5C965"
Public Const InterfaceId As String = "8C15295C-477B-434F-9FDC-4626D418DA9E"
Public Const EventsId As String = "C434DF40-3F7B-45EE-B0D8-C85ABED03E88"
'(...)'
Public Function TestFkt(ByVal intValue As Integer) As Integer
TestFkt = 5 * intValue
End Function
Public Sub New()
MyBase.New()
End Sub
'(...)
End Class
首先,我想知道为什么depency walker中的函数列表是空的,但这不是问题所在。
从VBScript调用函数效果良好,如下所示:
Dim objCom
Dim iCounter
set objCom = CreateObject("VBNetDLL.InterFc")
For iCounter = 1 To 20
MsgBox objCom.TestFkt(iCounter * 7)
Next
从VisualBasic(VB6)调用函数也很好:
Dim objCom
Set objCom = CreateObject("VBNetDLL.InterFc")
Msgbox objCom.TestFkt(3 * 7)
(好吧,代码看起来是一样的,但相信我,一个是VBScript,另一个是Visual Basic;-)
我一辈子都无法工作的是从C++(VS 2012)中调用这些相同的函数。我尝试了很多东西,都是从开始的
#import <VBNetDLL.tlb>
using namespace VBNetDLL;
第一件事很奇怪,Intellisense将VBNetDLL::InterFC显示为"结构",而不是类。我尝试过的东西包括:
InterFc *objControl = new InterFc;
这给了我"没有合适的默认构造函数可用"answers"不允许不完整的类型",以及:
CoInitializeEx(0, COINIT_MULTITHREADED);
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"InterFc", &clsid);
InterFc *pWApp;
hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL,IID_IUnknown, (void **)&pWApp);
编译良好,但尝试"pWApp->TestFkt"告诉我"使用未定义的类型'VBNetDLL::InterFc'","'->TestFkt'的左侧必须指向类/结构/联合/通用类型"answers"不允许指向不完整类类型的指针"。
长话短说:我该如何从C++中调用这些成员函数,尤其是因为从VBScript和VisualBasic6中使用它们似乎很容易?
好吧,对于那些可能偶然发现相同问题的人来说,以下是我如何最终实现这一点的:
CoInitialize(NULL);
_InterFcPtr pInterFC(__uuidof(InterFc));
int iTestResult = (int)pInterFC->TestFkt(2);
简单地告诉我,而不是"阅读F**手册!"不是更容易吗。嗯,也许不容易,但更好,但聪明(比其他人)似乎比善良更重要。
无论如何,谢谢。
相关文章:
- C++ SSE 内部函数:将结果存储在变量中
- C++代码停止工作错误使用cout内部函数
- 为什么从具有较大阵列的 SIMD 内部函数中获得的相对加速比标量更大?
- 使用英特尔内部函数 (AVX) 中的混合说明
- 英特尔汇编与内部函数,AVX
- 使用SSE内部函数复制少量数据时出现问题
- 在为函数编写单元测试时,我应该模拟所做的内部函数调用吗?
- 用于平铺矩阵乘法的 AVX 内部函数
- 是否可以使用类的析构函数内部函数来重置值?
- 我在理解 AVX 随机内部函数如何为 8 位时遇到一些问题
- 无法执行内部函数 strlen
- COUT 内部函数调用的顺序
- GCC(通过 CUDA)内部函数的编译器错误,但我没有使用任何
- C++ ld 链接器 --wrap 选项不适用于内部函数调用
- 通过Visual Studio将小型结构逐值传递到非内部函数的速度很慢
- 使用内部函数递增数组的特定元素
- 在使用英特尔内部函数对 SIMD 代码进行编程时,如何强制使用 vmovapd 而不是 vmovupd?
- 如何最大限度地减少使用标量 SIMD 内部函数的 SIMD 注册表的双重负载开销
- 有符号整数溢出、内部函数和未定义的行为
- SSE2 内部函数 - 找到两个无符号短向量的最大值