2009-07-20 53 views
3

我正在將大量的.h和.lib文件從本地C++包裝到託管C++,以便最終用作C#中引用的.dll。void * to Object ^在C++/CLI中

某些本地C++函數具有返回類型void *。當我將值傳遞給我的調用代碼時,我不知道如何處理這個問題。例如:如果一個C#應用程序調用我的DLL包裝,有什麼事我從本地調用返回:

void* start(ThreadFunc,void *, unsigned *); 

我目前正在試圖框在通用系統返回:對象^沒有運氣。這是包裝中的電話:

m_NativeThread->start(cb, 
     GCHandle::ToIntPtr(GCHandle::Alloc(o)).ToPointer(), 
     static_cast<unsigned int*>(GCHandle::ToIntPtr(GCHandle::Alloc(u)).ToPointer()))); 

任何人都可以提供解決方案嗎?

回答

0

你可以讓它成爲一個IntPtr?你期望客戶用什麼方法來做這些事情?

+0

我不知道他們會如何處理void *。如果我知道爲什麼它在第一個playlce中被聲明爲void *,那麼這會有所幫助...... void *的目的是什麼?爲什麼/何時使用它? – TomO 2009-07-20 18:23:30

4

如果您的託管代碼需要看到void *的數據:

你不能投一個void *非託管 內存的管理對象引用。 要把它變成託管內存, 你必須使用Marshal.Copy()或 Marshal.PtrToStructure()。 當然只有在知道void *指向的數據類型 時纔有效。 source

如果您的託管代碼並不需要看到的數據中無效*:

儲存於一個IntPtr如果您 託管代碼並不需要看什麼 它並且稍後將它傳遞迴 非託管代碼。 source