将元帅C#词典转换为C ++(不受管理)

时间:2019-01-07 11:01:58

标签: c# c++ marshalling

我目前正在开发.NET Framework 4.7.2应用程序。我需要使用非托管C ++库中的逻辑。 我一定不能使用C ++ / CLI(托管C ++)

我试图弄清楚如何将C#词典编组为非托管C ++:

Dictionary<string, float> myData

您知道,在非托管C ++中,Dictionary<string, float>的正确等效项是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果字典很小,请在具有键值结构的连续缓冲区中进行序列化。

如果您的词典很大,并且C ++仅需要查询几个值,或者更改过于频繁,请使用COM interop。由于.NET运行时中广泛的COM支持,因此非常容易实现。这是一个示例,使用guidgen为该界面生成GUID。

// C# side: wrap your Dictionary<string, float> into a class implementing this interface.
// lock() in the implementation if C++ retains the interface and calls it from other threads.
[Guid( "..." ), InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
interface iMyDictionary
{
    void getValue( string key, out float value );
    void setValue( string key, float value );
}
[DllImport("my.dll")]
extern static void useMyDictionary( iMyDictionary dict );

// C++ side of the interop.
__interface __declspec( uuid( "..." ) ) iMyDictionary: public IUnknown
{
    HRESULT __stdcall getValue( const wchar_t *key, float& value );
    HRESULT __stdcall setValue( const wchar_t *key, float value );
};
extern "C" __declspec( dllexport ) HRESULT __stdcall useMyDictionary( iMyDictionary* dict );