2013-02-05 116 views
1

我試圖改寫以下VB代碼到C++進口和使用一個DLL文件:導入DLL到C++程序

<DllImport("NfcReader.dll", EntryPoint:="CommOpen")> _ 
Public Function CommOpen(ByRef hCom As IntPtr, ByVal com_port As String) As Short 
End Function 

我試着用下面的代碼:

#using <mscorlib.dll> 
using namespace System::Runtime::InteropServices; 

namespace sensor{ 
[DllImport("NfcReader.dll", EntryPoint = "CommOpen")] 
short int CommOpen(intptr_t hCom, std::string com_port); 
} 

但我不斷收到錯誤system.accessviolation,因爲顯然我的函數參數不能是字符串。
有人可以幫我解決這個問題嗎?我不知道在這種情況下,DllImport()甚至是適當的函數嗎?

+0

無論這可能工作的可能性...我不相信這是好的,甚至是理智的,從其他語言導入庫...這是計劃C++,你不在CLI上... – rubbyrubber

+0

不管我在下面寫的答案如何,「如何將這段代碼片段從一種語言轉換爲另一種語言?」在SO上通常不受歡迎。他們的範圍非常有限。在未來嘗試寫出你的問題,以便讓更多的讀者受益。閱讀關於如何提問的FAQ。 –

+0

在CLI上,您不需要這樣做,因爲CLI類在所有.NET語言中都工作(主要是)... – rubbyrubber

回答

0

DllImportAttribute只將C風格的DLL導入到CLI中。

這將意味着NfcReader.dll是一個標準的C/++的DLL,你應該能夠使用它,但是通常在C/++中使用dll。我從來沒有做過C/++,但我認爲LoadLibrary()將是一個很好的開始。

+0

它不會導入DLL,它會從DLL導入函數。它包括C++名稱拼寫與微軟namescrambling算法。在C++ CLI中,您可以鏈接到純C++。就我所知,你可以在不需要額外聲明的情況下調用本地函數。該屬性僅用於Visual Basic和Visual C#中。 – bash0r