我的問題是瞭解混合語言編程 和訪問外部庫中API的更精細的點。我的C++技能不存在 和VB,平庸。混合語言編程,VB和C++,瞭解API和指針
我有一個C++ dll編譯(portaudio庫),並試圖從VB (Visual Studio 2005)訪問它。 我調用函數時出現MarshallDirectiveException錯誤,我相信因爲 我與dll的錯誤交互。
C++函數和結構的定義如下:
頭信息:
typedef int PaHostApiIndex;
...
typedef double PaTime;
...
typedef struct PaDeviceInfo
{
int structVersion; /* this is struct version 2 */
const char *name;
PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/
int maxInputChannels;
int maxOutputChannels;
PaTime defaultLowInputLatency;
PaTime defaultLowOutputLatency;
PaTime defaultHighInputLatency;
PaTime defaultHighOutputLatency;
double defaultSampleRate;
} PaDeviceInfo;
...
const PaDeviceInfo* Pa_GetDeviceInfo(PaDeviceIndex device);
程序使用從文檔:
const PaDeviceInfo* Pa_GetDeviceInfo ( PaDeviceIndex device )
檢索指針PaDeviceInfo結構其中包含有關指定的 設備的信息。
返回: 指向不可變PaDeviceInfo結構的指針。如果設備參數超出範圍 ,該函數返回NULL。
參數: 設備有效的設備指數取值範圍爲0至(Pa_GetDeviceCount() - 1)
在VB程序我有:
Private Declare Function Pa_GetDeviceInfo Lib "portaudio_x86.dll" (ByVal dindex As Integer) As PaDeviceInfo
...
Private Structure PaDeviceInfo
Dim structVersion As Integer
<MarshalAs(Runtime.InteropServices.UnmanagedType.LPStr)> Dim name As String
Dim hostapi As Integer
Dim maxInputChannels As Integer
Dim maxOutputChannels As Integer
Dim defaultLowInputLatency As Double
Dim defaultLowOutputLatency As Double
Dim defaultHighInputLatency As Double
Dim defaultHighOutputLatency As Double
Dim defaultSampleRate As Double
End Structure
...
Dim di As New PaDeviceInfo
di = Pa_GetDeviceInfo(outputParameters.device)
這種感覺錯誤作爲文檔狀態Pa_GetDeviceInfo將指針返回到包含關於結構的信息 的結構,意味着函數最初創建結構。
我完全不熟悉混合語言編程,C++ utter noob和一個糟糕的VB程序員。 任何人都可以引導我以正確的方式來解決這個問題嗎? 我的感覺是,我需要理解如何讓VB引用在dll中創建的memry中的結構,所以我需要讓vb將「指向東西的指針」理解爲函數返回。
非常感謝您提供的任何幫助。請不要只是說rtfm,我在我的眼睛在FM的 分鐘,我只是不知道在哪裏看。
非常感謝, 大衛
誰投了票,謝謝,但我希望有人有一個答案!說真的,我在'困難的東西'這個領域問的問題,因此不太可能得到答案,或者人們正在閱讀這個問題,並且會「噓噓,什麼是小白,回到麻煩的東西上」? – 2009-01-24 22:29:11
看起來你正試圖在VB.NET中處理互操作,所以我唯一的建議就是在C++/CLI中編寫一些託管包裝代碼。從長遠來看,這可能會讓你的生活變得更輕鬆。另一方面,對於任何處理VB6或VBA互操作的人來說,我不能推薦本書的相關章節(現在可以在線獲得)「Hardcore Visual Basic」:http://vb.mvps.org/鐵桿/ – 2010-05-20 17:42:33