2011-08-11 79 views
0
Module Module1 
    Public Declare Function GET_CALCULATION_FAN_ALONE Lib "EbmPapstFan.dll" (ByRef path As String) As Long 
    Private Declare Function GET_PRODUCTS Lib "ebmpapstfan.dll" (ByRef path As String) As Long 
    Public Declare Function SET_XML_PATH Lib "EbmPapstFan.dll" (ByRef path As String) As Long 

    Sub Main() 
     Dim Int_A As Long, Int_B As Long Str_Antwort As String, Str_Input As String 
     Str_Input = "C:\Users\Sebastiaan\AppData\Local\ebmpapst\Product_selector_2011\Data\Fans\" 
     Int_A = SET_XML_PATH(Str_Input) 
     Int_B = GET_PRODUCTS("114709;A3G800AV0101;") 

    End Sub 

End Module 

成績VB DLL奇怪的輸出

Int_A = 12884901888
Int_B = 25

如何重寫在C#而不是VB代碼?

[DllImport("EbmPapstFan.dll")] 
public static extern long SET_XML_PATH(String path); 

[DllImport("EbmPapstFan.dll")] 
static extern long GET_CALCULATION_FAN_ALONE(String fanDescription); 

[DllImport("EbmPapstFan.dll")] 
public static extern long GET_PRODUCTS(String fanDescription); 

static void Main(string[] args) 
{ 
    long a = SET_XML_PATH(@"C:\Users\Sebastiaan\AppData\Local\ebmpapst\Product_selector_2011\Data\Fans\"); 
    long b = GET_PRODUCTS("114709;A3G800AV0101;"); 
} 

成績

A = 579780113483169791
B = 4294967292

我寫此C#代碼但輸出是不一樣的,如何解決這個?

當我改變長爲int的resuls爲a = -1 B = 4 ....

則DLL在Delphi的,並且應當給予相同的輸出

+0

在DLL中定義的函數如何? – SLaks

+1

你的字符串在你的vb和c#之間是不同的。 'Fans'與'PlugFans_R-Typen' –

+0

我不知道,這是一個用Delphi寫的DLL。我無法打開該DLL,因爲該文件無法訪問。 – Sebastiaan

回答

2

更改string參數ref string s(與VB.Net的ByRef相匹配)

調用函數時,您需要傳遞一個ref字符串變量。

0

如果使用4.0,那麼你可以試試這個。不確定但可能有幫助。使用動態關鍵字。

dynamic comInterop= Activator.CreateInstance(Type.GetTypeFromProgID("MyCOM.Object.Name")); 
var result = comInterop.MethodCall(parameter);