2009-06-02 4 views
0

dll의 전체 코드는 네이티브 C를 사용하여 작성되었으며 하나의 함수는 참조 용으로 아래에 있습니다..NET에 대한 관리되지 않는 네이티브 C 코드

같이 DllImport의 INT32 FAR PASCAL swe_calc ( 이중 TJD, INT IPL, INT32 iflag, 이중 *의 XX, 숯의 SERR *);

대부분의 함수는 FAR 파스칼을 사용하여 작성되었으며이 DLL을 .net과 호환되도록 변환하려고 시도했을 때 오류가 많았습니다.

Comman 런타임 지원 속성을 "일반 런타임 지원 없음"에서 일반 런타임 지원 (예 : \ clr)으로 변경하여 시도했습니다. \ MD도 변경했습니다.

명령 프롬프트에서 Regsvr32를 사용하여 dll을 등록하려고했을 때 "모듈"mydll.dll "이"DllRegisterServer를 찾을 수 없습니다 "라는 오류가 발생했습니다.

저는이 C# 응용 프로그램에서이 DLL을 사용하는 것을 좋아합니다.이 중 하나를 사용하면 정말 도움이 될 것입니다.

미리 감사드립니다.

들 Gan

답변

1

dll (공통 런타임 지원)에 대한 컴파일 설정을 변경할 필요가 없습니다. 이것은 C++/cli로 작성된 혼합 모드 어셈블리 용입니다. 이것을 사용할 수는 있지만 수정하지 않고 dll을 사용하는 옵션이 있으며 이는 일반적인 시나리오입니다. .NET 프레임 워크의 큰 부분은 네이티브 win32 dll을 사용하여 정확하게 수행합니다.

또한 regsvr32가 필요하지 않으며 DLL과 "호환"할 필요가 없습니다. 이미 있습니다. .NET의 네이티브 함수 호출은 기본적으로 지원되며 매우 보편적입니다. dll 파일을 같은 디렉토리 또는 경로에있는 .net 응용 프로그램 위치에서 찾을 수 있는지 확인하십시오.

.dll 이름을 사용하여 C#의 함수를 DllImport로 선언하고 사용하십시오.

지원해야하는 경우 x64 문제를 고려하십시오. x64 버전의 dll이 필요할 수 있습니다. .NET 코드가 아키텍처에 따라 올바른 dll을로드하는지 확인하십시오.

"C .dll에서 .NET 코드 호출"방향이 더 복잡 할 수도 있지만 지원됩니다.

+0

감사합니다. 다음과 같이 제안한 방식을 시도했습니다. [DllImport ("swedll32.dll")] public static extern double swe_set_lapse_rate (double lapse_rate); 개인 무효 button1_Click (개체 발신자, EventArgs 전자) { double t = swe_set_lapse_rate (200) ;; } 버튼 클릭으로 해당 함수를 선언하고 호출했으며 "system.dllnotfoundexception"예외가 발생했습니다. "dll을로드 할 때 유창 함"과 같은 추가 정보. 내가 어딘가 잘못 됐는지 알려주세요. 감사합니다. –

+1

그것은 dll을 찾을 수 없다는 것을 알려줍니다. 그것을 찾을 수있는 곳에 두십시오. 명령 프롬프트를 열고 "경로"를 입력하면 드롭 할 수있는 위치 목록이 표시되고 Windows에서 해당 위치를 찾을 수 있습니다. –

0

Google 코드 검색에 기능 서명을 제공하여 소스 및 문서를 찾는 데 약 30 초가 걸렸습니다. Interop을 사용하여 작업 할 수 있어야합니다.

VB.Net 솔루션이 sweep.zip에 포함되어있는 것 같습니다. 도움이 될 수 있습니다.

0

모두 감사합니다,

나는 마침내 내가 system.dllnotfoundException 같은 오류가 발생했습니다, 그래서 내가 비스타 64 비트를 사용하고 있었다 당신의 도움으로 문제를 해결했다.

플랫폼을 'Any CPU'에서 'X86'으로 변경하고 응용 프로그램을 컴파일하고 "C : \ Windows \ SysWOW64 \"에 dll을 넣었습니다.

나는 DllImport 함수를 사용했다. 당신의 친절한 도움을

감사 너희들,

들 Gan 답장을 보내

관련 문제