В настоящее время я работаю над классом Wrapper для библиотеки C ++ в C# (сделайте tnet core 3.1 в Debian linux) и борюсь с DllImport следующим методом (взятым из документации библиотеки libs):
HRESULT __stdcall InitializeEngine(
BSTR CustomerProjectID,
BSTR LicensePath,
BSTR LicensePassword,
BSTR FREngineDataFolder,
BSTR FREngineTempFolder,
VARIANT_BOOL IsSharedCPUCoresMode,
IEngine** Engine);
Обновление: если посмотреть дальше в заголовочных файлах, COM-типы являются typedefs. Поэтому фактическая подпись выглядит примерно так:
int __stdcall InitializeEngine(
wchar_t* CustomerProjectID,
wchar_t* LicensePath,
wchar_t* LicensePassword,
wchar_t* FREngineDataFolder,
wchar_t* FREngineTempFolder,
short IsSharedCPUCoresMode,
IEngine** Engine);
Мой импорт в настоящее время выглядит так:
[DllImport("FREngine", CallingConvention = CallingConvention.StdCall)]
extern static int InitializeEngine(
[MarshalAs(UnmanagedType.LPWStr)]string customerProjectID,
[MarshalAs(UnmanagedType.LPWStr)]string licensePath,
[MarshalAs(UnmanagedType.LPWStr)]string licensePassword,
[MarshalAs(UnmanagedType.LPWStr)]string frEngineDataFolder,
short isSharedCPUCoresMode,
ref IntPtr engine);
Но это не работает. Это правильный перевод подписи метода?