Я обнаружил, что .net не создает файл TLB при составлении C c # dll подвергся воздействию ком. Один из советов в статье Microsoft «Разоблачить компоненты .NET Core для com» - это написать файл IDL, который можно затем собрать с Midl в Tlb. < /P>
Документация на этой странице также ссылается на пример текста проекта comseverdemo, который я успешно работал. Чтобы иметь возможность получить доступ к comserver.dll, созданному этим проектом Comseverdemo, и попытаться получить доступ к нему из C ++.
Класс сервера в Comserverdemo определяется как:
Код: Выделить всё
using System;
using System.Runtime.InteropServices;
namespace COMServer
{
[ComVisible(true)]
[Guid(ContractGuids.ServerClass)]
public class Server : IServer
{
double IServer.ComputePi()
{
double sum = 0.0;
int sign = 1;
for (int i = 0; i < 1024; ++i)
{
sum += sign / (2.0 * i + 1.0);
sign *= -1;
}
return 4.0 * sum;
}
}
}
[
uuid(b5bfbf8c-bebc-4eaa-8efc-a96d770a874b),
version(1.0),
]
library COMServer
{
importlib("stdole2.tlb");
[object, uuid(DB1797F5-7198-4411-8563-D05F4E904956)]
interface IServer : IUnknown {
double ComputePi();
};
};
< /code>
Я также попробовал 'BA9AC84B-C7FC-41CF-8B2F-1764EB773D4B' ', который является GUID интерфейсом сервера, но это также делает это, когда попытка получить доступ к C ++. /p>
Я нашел два примера, которые показали, как использовать TLB и получить доступ к DLL из C ++, который я изменил на костюм, один из них: < /p>
#import "COMServer.tlb"
using namespace COMServer;
CoInitialize(nullptr);
IServerPtr pServerPtr(__uuidof(IServer));
std::cout ComputePi()
, а другое: < /p>
#import "COMServer.tlb"
using namespace COMServer;
CoInitialize(nullptr);
COMServer::IServerPtr pServerPtr;
HRESULT hRes = pServerPtr.CreateInstance(__uuidof(COMServer::IServer));
std::cout ComputePi()
В обоих случаях pserverptr, по -видимому, является нулевым, а «e_pointer неверный указатель». Исключение происходит при попытке запустить функцию Computepi. Четкий рабочий пример того, как написать файл IDL для примера Microsoft ComserverDemo, может быть хорошей отправной точкой для других, а также для меня о том, как это сделать, тем более что статья Microsoft рекомендует это, но затем пропускает по этому поводу.
Подробнее здесь: https://stackoverflow.com/questions/794 ... com-from-c
Мобильная версия