C#: Как маршалу VariantBool управлять булевым? - PullRequest
0 голосов
/ 21 апреля 2020

В настоящее время я работаю над классом 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);

Но это не работает. Это правильный перевод подписи метода?

...