作者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