[英]P/Invoke. How to call unmanaged method with marshalling from C#?
我有P / Invoke問題。 我正在從c#代碼中調用.dll(在c ++上實現)。 有一個類,其中包含以下方法:
virtual AudioFileList *API CreateAudioFileList ()=0;
virtual bool API DisposeAudioFileList (AudioFileList *iAudioFileList)=0;
AudioFileList
類如下所示:
virtual bool API GetFile (long index, std::string *oPath, AudioFileInfo *fileInfo)=0;
virtual long API GetNumberFiles ()=0;
因此,問題是我該如何調用CreateAudioFileList
方法,然后將結果從C#代碼傳遞到DisposeAudioFileList
? 謝謝!
我一直都用它來生成我的靜態extern malarkey
不幸的是,沒有簡單的方法可以通過P / Invoke調用本機C ++ DLL模塊中的類。 但是,Visual C ++ Team Blog帖子提供了一個解決方案 ,但這很復雜。
還有一個可能會有用的鏈接: http : //social.msdn.microsoft.com/Forums/zh-CN/vcgeneral/thread/5df04db1-bbc8-4389-b752-802bc84148fe/
本文在CodeProject上說明了如何處理這種編組。
由於名稱修改,您不能這樣做。 您應該投資學習C ++ / CLI。 這將允許您創建一個中間層,該層提供適當的封送處理,並且不受C ++中名稱處理的限制。
這是C ++ / CLI中的樣子(當然,未經測試):
public ref class ManagedAudioFileList
{
private:
const AudioFileList* Native;
// Replace AudioFileListManager with the class containing
// the CreateAudioFileList and DisposeAudioFileList methods.
const AudioFileListManager* Manager;
public:
ManagedAudioFileList(void);
!ManagedAudioFileList(void);
~ManagedAudioFileList(void);
// Insert various methods exposed by AudioFileList here.
};
ManagedAudioFileList::ManagedAudioFileList(void)
{
// Replace AudioFileListManager with the class containing the
// CreateAudioFileList and DisposeAudioFileList methods.
Manager = new AudioFileListManager();
Native = Manager->CreateAudioFileList();
}
~ManagedAudioFileList::ManagedAudioFileList()
{
Manager->DisposeAudioFileList(Native);
delete Manager;
}
!ManagedAudioFileList::ManagedAudioFileList()
{
}
// Wrap various methods exposed by AudioFileList.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.