2011-03-15 2 views
3

C#에서 델파이 함수를 호출하는 데 문제가 있습니다. (보호 된 메모리를 읽거나 쓰려고 시도했습니다.) 메소드를 호출하는 올바른 방법이 무엇인지 궁금합니다. 델파이 함수 서명은 다음과 같습니다 :C#에서이 Delphi 함수를 호출하는 방법은 무엇입니까?

procedure methodToCall(
    aFirstParameter: Widestring; 
    var aSecondParameter: Widestring 
    ); stdcall; 

C#에서이 메서드를 호출하는 올바른 방법은 무엇입니까?

+0

안녕하세요, 어떻게 당신은 C#을에서 이것을 요구하고있다? DllImport 또는 COM 상호 운용성? 참조를 추가 했습니까? 우리는 C# 면도 볼 수 있습니까? –

답변

7

WideString으로는 COM BSTR와 호환 그래서 .NET 마샬은 아주 행복하게 그것을 소비 할 수 있어야한다 :

[DllImport(@"test.dll")] 
private static extern void methodToCall(
    [MarshalAs(UnmanagedType.BStr)] 
    string aFirstParameter, 
    [MarshalAs(UnmanagedType.BStr)] 
    ref string aSecondParameter 
); 
+0

[MarshalAs (UnmanagedType.LPStr)] StringBuilder firstParameter를 사용하면 어떻게됩니까? –

+0

Delphi 코드가 LPStr이 아닌 WideString (일명 BSTR)을 수신하도록 작성 되었기 때문에 잘못된 것입니다. 방금 DLL을 작성하여 위의 C# 코드를 테스트하여 완벽하게 작동합니다. –

+0

델파이 WideStrings와 BSTR이 같은 소스가 있습니까? – CodesInChaos

관련 문제