2012-08-23 3 views
0

.net에서 사용하고 싶은 DLL이 있습니다. dllimport를 사용하려고하는데 오류가 발생합니다. 나는 Windows system32 폴더에 dll을 넣었고 또한 exe가 저장되어있다. 함수 정의는 vb에서 작동한다는 것을 알았다.dllimport를 사용하는 C++ dll # C#

 declare function LocalToWGS84 lib "TTDatum3.Dll"(Lat As Double, Lon As Double, ByVal Datum As Long) As Long 

방법

class Program 
{ 

    [DllImport("TTDatum3.Dll", EntryPoint="LocalToWGS84")] 
    public static extern long LocalToWGS84([In,Out]double lat, [In,Out]double lon,[In,Out]long datum); 

    public static void Main(string[] args) 
    { 
     Console.WriteLine(LocalToWGS84(50.82011492,-0.117981131, 150)); 

    } 
} 

C 번호

#ifdef __cplusplus 
extern "C" { 
#endif 

int __stdcall WGS84ToLocal(double * lat, double * longt, int d); 

SIG 오류 :

되지 않은 예외 : System.AccessViolationException는 : 보호 된 메모리를 읽거나 쓰기 시도. 이것은 다른 메모리가 VB6 손상

+0

당신은 또한 방법의 서명을 넣을 수 : 그리고 리턴 값과 데이텀 매개 변수는이 int 잘해야 하는가? C++의 메소드 서명을 의미합니까? – Madushan

+0

원래 코드의 메소드 서명이 없다. 델파이라고 쓰여졌다. –

+0

[In, Out] 매개 변수를 제거하십시오 ... – devundef

답변

0

lat 및 lon 매개 변수는 C 정의에서 int (int*)에 대한 포인터로 정의되었으므로 매개 변수를 ref으로 표시해야합니다.

[DllImport("TTDatum3.Dll", EntryPoint="LocalToWGS84")] 
public static extern int LocalToWGS84([In,Out]ref double lat, [In,Out]ref double lon,[In,Out]int datum); 
0

긴 것을 종종 idication입니다! = 긴

+0

여전히 같은 오류 –

0

흠을 int로 C# .NET을

변경 긴에서, 어둠 속에서 메서드 시그니처에게 찔러을 모른 채 조금 그렇습니다. 델파이를 지원하는 리플렉터/디 컴파일러 도구를 찾으십시오. 메소드 서명을 얻기 위해 이들 중 일부를 시도해 볼 수 있습니다. DeDe가 비즈니스처럼 보입니다 (게시글의 길이가 얼마인지 확실하지 않음) Delphi Decompilers

MarshalAs 속성을 사용해 볼 수도 있지만 다시 시도해보십시오. 메서드 시그니처를 알지 못해도 매우 적합합니다.