作者luckfox (lasfd)
看板C_Sharp
标题[问题] C#中呼叫C++ Library的问题
时间Mon Jul 12 11:14:14 2010
首先小弟将问题简化如下,有一个C++的Library
小弟打算呼叫其中的Get_Group_List
void Get_Group_List(_GROUP_LIST *Group_List);
struct _GROUP_ITEM
{
char szName[32+1];
}
struct _GROUP_LIST
{
int nCount;
_GROUP_ITEM *stItem;
};
在C++的呼叫如下
_GROUP_LIST Group_List;
Group_List.nCount=-1;
Get_Group_List(&Group_List); //第一次呼叫,当nCount=-1,函数会传回真正的SIZE
Group_List.stItem=new _GROUP_ITEM[Group_List.nCount];//配置真正的记忆体大小
Get_Group_List(&Group_List); //第二次呼叫
//do something.....
delete []Group_List.stItem;
其中的函数Get_Group_List,如果在C++呼叫的作法如上,但是如果我在C#中呼叫
该C++ library,我该如何表达呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.34.167
1F:→ pico2k:用C#改写这个函数,会比你用C#呼叫C++的dll简单... 07/12 11:21
2F:→ luckfox:小弟只是举例而言,将程式给简化了 07/12 11:46
3F:→ pico2k:我知道,我还是建议你用C#改写原本的dll... 07/12 11:49
4F:→ luckfox:实际上此Dll里面有很多函数可用,只是目前被此一问题所卡住 07/12 11:59
5F:→ luckfox:如果要改写,可能要花很多时间,实务上,上述的写法,在C#中 07/12 11:59
6F:→ luckfox:无法实现吗? 07/12 11:59
7F:→ pico2k:go to google "C# marshal" 07/12 12:05
8F:推 horngsh:google P/Invoke or Plateform invoke may help also. 07/12 14:01
9F:→ dk3208:印象中除非写成COM元件,否则C#里面是看不到C++的class 07/12 17:35
10F:→ dk3208:所以如果dll不能动的话,可能只有重写了 07/12 17:36
11F:→ TwofHeart:用C帮DLL加一层wrapper 07/13 08:17