簡體   English   中英

P /調用。 如何通過C#編組調用非托管方法?

[英]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

http://clrinterop.codeplex.com/releases/view/14120

不幸的是,沒有簡單的方法可以通過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 ++類

由於名稱修改,您不能這樣做。 您應該投資學習C ++ / CLI。 這將允許您創建一個中間層,該層提供適當的封送處理,並且不受C ++中名稱處理的限制。

這是C ++ / CLI中的樣子(當然,未經測試):

。H

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.
};

.cpp

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM