从 C 语言的 dll 文件(用 VB 编写)调用 COM 组件

标签 c vb.net

我有一个用 VB 编码的 dll,我想从普通的 C 调用它的 COM 组件。下面是该dll的几行代码。假设我想从普通的 C 调用方法 Initialize()C 中方法 CoCreateInstance 的参数应该是什么C

我成功地从 C++ 调用此 dll 的所有方法,但我想从 C 调用。您能帮我解决这个问题吗?

Namespace Thermodynamics

<System.Serializable()> <ComClass(Calculator.ClassId, Calculator.InterfaceId, Calculator.EventsId)>
Public Class Calculator

    Public Const ClassId As String = "5F2B671E-FA61-401e-8D14-71FB5B328F9B"
    Public Const InterfaceId As String = "0EA44EDE-AD65-435c-B8CC-0D1146BD182B"
    Public Const EventsId As String = "0817BD3F-5278-4e49-A7FB-92416A8A7E4E"

    Private _availablecomps As Dictionary(Of String, ConstantProperties)

    Sub New()

    End Sub

    ''' <summary>
    ''' Initializes the calculator and loads the compound databases into memory.
    ''' </summary>
    ''' <remarks></remarks>
    <System.Runtime.InteropServices.DispId(1)> Sub Initialize()

        'load databases
        _availablecomps = New Dictionary(Of String, ConstantProperties)

        'ChemSep
        Me.LoadCSDB()

        'load DWSIM XML database
        Me.LoadDWSIMDB()

    End Sub

最佳答案

这是调用Initialize()方法的完整C++代码。

#include "tchar.h"
#include<iostream>
#include<Windows.h>
#include <comutil.h>
#include <string>
#include <xstring>


#import "C:/DTLSource/DTLSource/DTL-master/DWSIM/bin/Debug/DTL.tlb"  raw_interfaces_only
using namespace DTL;


int main(int argc, _TCHAR* argv[])
{
     // Initialize COM.
 HRESULT hr = CoInitialize(NULL);

    _CalculatorPtr ptrinterface(_uuidof(Calculator));
 ptrinterface->Initialize();

    CoUninitialize();
return 0;
}

关于从 C 语言的 dll 文件(用 VB 编写)调用 COM 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31903979/

相关文章:

.NET:如果接收到的数据包靠得太近,UDPClient.BeginReceive() 将无法运行回调函数

c# - SSL 证书 : A specified logon session does not exist

c - GTK 新手 : glade app has huge fonts

对通过指针访问结构成员感到困惑

vb.net - 如何使用linq从vb.net中的键值对列表中的匹配键中获取值?

c# - XPath 选择匹配的节点

vb.net - 从excel导入数据并合并

c - 关于 c 指针和 * & 运算符的问题

c++ - 如何编译以减少内存/STACK 似乎没有任何改变?

c、求指针数组的长度