最近做一个项目,需要调用另外一个公司的dll,是用c++写的,其中一个函数的参数类型为Varient*,看了一下他们提供的c++写的demo,传进去的参数应该是stl::map这个数据类型。但是c#中没有map,我用了dictionary和hashtable转为object传进去,都不成功,请教大家怎么弄?只有30分,大家帮帮我

解决方案 »

  1.   

    自己用C++写了dll,然后调用他们提供的dll,你写的C++的dll可以传入一个结构数组(每个结构实例代表一个键值对),做起来虽然有点笨重,但可以实现效果;
    哥们,要尽快结贴呀,看到结贴率低的都不想回答。
      

  2.   

    stl::map 好像没对应的类型,stl::map类型有点复杂,IntPtr不知道怎么匹配,不过2楼的建立不啻为一种解决方案
      

  3.   

    我是用c#调用别的公司写的dll,二楼的没有怎么看明白,能说的详细些吗?顶上去
      

  4.   

    我上面说错老 1楼的不啻为一种解决方案 2楼原来是我,汗一个,惯性思维了。可以定义一个结构
    [StructLayout(LayoutKind.Sequential)]
            struct MapNode 
            {
                [MarshalAs(260, CharSet = CharSet.Unicode)]
                string Key;
                [MarshalAs(260, CharSet = CharSet.Unicode)]
                string Value;
            }对应c++结构
    struct MapNode
    {
    WCHAR Key[260];
    WCHAR Value[260];
    };
    产生新的C++ dll封装带map的接口
    改成 例如
    void Test(MapNode []mn);然后在C#中导入这个接口即口。ps:爆汗,最近两天回答了很多类似的问题 都不查的 
      

  5.   

    哦,我明白了,意思是我重新写一个dll,相当于重新包装下
      

  6.   


    对,类似于适配器,昨天太忙没有时间看回复的贴子,用你的dll调用厂家的dll,你的dll要为c#留好接口就行了;