我有一个用 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/