델파이에서 작성한 dll을 닷넷에서 사용하시고자 하는데 발생한 문제군요.
델파이가 문제라거나 닷넷이 문제라거나 하는 경우가 아닙니다.
결론은 닷넷 CLR 과 델파이 데이터 타입을 맞춰주셔야 합니다.
간단하게 델파이의 WideString 은 COM 의 BSTR 타입과 호환이 됩니다.
즉 닷넷에서의 타입은 UnmanagedType.BStr 로 받으셔야 합니다.
https://msdn.microsoft.com/ko-kr/library/s9ts558h(v=vs.110).aspx
위의 링크를 참조하세요.
첫눈 님이 쓰신 글 :
: DelphiXE2 와 Visual Studio 2013을 사용합니다.
:
: 하다 하다 안되니 이젠 별 짓을 다 해봅니다.
:
: 델파이로 DLL을 만들어 VB에서 가져다 사용할까 하고 테스트삼아 하나 만들어 봤습니다.
:
:
:
:
:
: library MyDLL;
:
: uses
: VCL.Dialogs;
:
: Function Test(A: WideString; B: WideString) : WideString; stdcall;
: Var
: C : String;
: begin
: Result := A + B;
: ShowMessage('A : "' + A + '"' + #10#13 + 'B : "' + B + '"' + #10#13 + 'Result : "' + Result + '"');
: end;
:
: exports
: Test name 'Test';
:
: begin
: end.
:
:
:
:
:
:
: 위와 같이 DLL을 만들고 이것을 아래와 같이 VB에서 사용하는데요.
:
:
:
:
:
: Public Class Form1
:
: Public Declare Function Test Lib "MyDLL.dll" (ByVal A As String, ByVal B As String) As WideString
:
: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
: Dim a As String = "글자가" & vbCrLf
: Dim b As String = "잘보이나?" & vbCrLf
: Dim c As String = ""
:
: c = Test(a, b)
:
: TextBox1.Text = a
: TextBox2.Text = b
: End Sub
: End Class
:
:
:
:
:
: VB쪽에서는 이상이 없는데 문제는 델파이쪽입니다.
:
: ShowMessage('A : "' + A + '"' + #10#13 + 'B : "' + B + '"' + #10#13 + 'Result : "' + Result + '"');
:
: 이부분에서 한글이건 영문이건 관계없이 글자가 모두 깨져서 보이거든요.
:
: 이건 어떻게 해결해야 하나요?
|