2011-08-11 11 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代わりにVBのC#で、このコードを書き換える方法= 25

[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#コードを書いたが、出力は、これを解決する方法、同じではありませんか?

iはresulsであるint型のに長い変更-1 = B = 4 ....

DLLはDephiであり、ref stringに同じ出力

+0

DLLにはどのように関数が定義されていますか? – SLaks

+1

あなたの文字列はあなたのVBとC#の間で異なります。 'Fans' Vs' PlugFans_R-Typen' –

+0

わかりません、それはDelphiで書かれたDLLです。ファイルにアクセスできないため、dllを開くことができませんでした。 – Sebastiaan

答えて

2

変更をstringパラメータを与えるべきです(VB.NetのByRefと一致する)

関数を呼び出すときには、文字列変数refを渡す必要があります。

0

4.0を使用している場合、これを試すことができます。わからないけど助けになるかもしれない。動的キーワードを使用します。

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