2010-12-21 3 views
3

Win32 .dll 파일을 C# .NET으로 작성할 수 있습니까? 예인 경우, 자습서를 어디에서 찾을 수 있습니까? 아니요, 그렇다면 Win32.DLL을 작성 하시겠습니까?C# .NET으로 Win32 .dll 파일을 작성할 수 있습니까?

감사합니다.

+2

달성하려는 목표는 무엇입니까? 'Write Win32.dll'은 많은 문맥이 없으면 의미가 없습니다. – Oded

+1

기존 Win32 dll을 호출하거나 C#을 기본 Win32 코드로 컴파일 하시겠습니까? –

+0

나는 C#의 코드처럼 다른 응용 프로그램에서도 사용할 수있는 네이티브 win32 DLL을 작성하고 싶습니다. [DllImport ("myLibrary.dll")] – losingsleeep

답변

2

Win32 스타일의 내보내기로 고전적인 Win32 DLL을 만드는 것처럼 들리는가요? (Win32 스타일의 내보내기는 DllImport가 선택하는 것입니다.) 관리되는 코드 (C# 또는 관리되는 C++)로는 그렇게 할 수 없습니다. 내가 아는 한, 언 매니지드 C/C++를 사용해야 할 것이다.

프로그래밍 찰스 페트 볼드 (Charles Petzold)의 프로그래밍 Windows 또는 Win32 프로그래밍에 관한 유사한 서적은 시작하기에 좋은 장소 일 수 있습니다. 또는 'hello world'Win32 DLL 샘플을 찾으십시오. 또는 Visual Studio에서 Win32 DLL 프로젝트를 생성하고 생성 한 파일을 살펴보십시오. 시작하기위한 자리 표시 자 텍스트가 있어야합니다.

관리 코드는 확장명이 .dll 인 파일을 사용하지만 실제로는 관리되는 코드의 컨테이너이며 Win32 스타일의 진입 점이 없으므로 Win32 진입 점이 필요한 다른 코드는 사용할 수 없습니다. 그들. 혼동을 피하기 위해 dll 대신 "관리되는 어셈블리"라고도합니다.

-

업데이트 - 다른 옵션이있을 수 있습니다 : 당신은 네이티브 코드와 관리 코드를 모두 포함하는 DLL이 이는 "Mixed mode DLL"이라고 무엇을 만들 수 있습니다. 이 DLL은 'export'할 관리 C# 클래스와 Win32 스타일의 API를 내보내는 소량의 혼합 C/C++를 가질 수 있습니다. 이것이 가능할 수도 있지만 반드시 좋은 일은 아닙니다 : 평범한 Win32 DLL을로드하려고하는 코드는 결과로로드 된 CLR을 얻지 못할 수도 있습니다. 프로세스에 이미 이미로드 된 CLR의 충돌 버전이있는 경우 문제가 발생할 수 있습니다. 혼합 모드 DLL은 C#/관리 코드가 Win32 DLL로 위장하는 것을 허용하기보다는 C# 어셈블리가 C/C++ 코드를 다시 사용할 수있게하는 데 더 유용합니다.

1

당신은 당신이 COM 개체로 쓰기 모든 .NET 어셈블리를 노출 할 수 있습니다 : 여기

는 튜토리얼입니다.

these tutorials (VS 2003의 경우에도 유효 함)을 참조하십시오.

+0

. 내가 C# .NET에서 COM DLL을 작성하고 기본 Win32 DLL처럼 사용할 수 있다고 말할 수 있습니까? 예를 들어 [DllImport ("myLibrary.dll")] 특성 (및 기타 등)을 사용하여 기본 Win32 DLL을 가져올 수 있습니다. COM DLL을 사용할 수 있습니까? – losingsleeep

+1

@ user434186 - C#을 사용하면 COM dll을 쓸 수 없습니다. 그러나 내 대답에 링크 된 자습서의 단계를 따르면 COM DLL과 같이 사용할 수 있습니다. – Oded

3

예, 가능합니다. 실제로 그것을위한 도구가 있습니다. 그것은 Rainmeter 응용 프로그램에서 약간 숨겨져 있습니다.

Rainmeter SDK for C#에는 공용 정적 메서드를 네이티브 응용 프로그램에서 호출 할 수있는 외부 함수로 변환 한 CS_DLL_FOR_C.exe이라는 실행 파일이 포함되어 있습니다. 사실 Rainmetere 자체가 LoadLibrary

에 의해 C++로드 플러그인에서 개발 당신은 다음 링크

x64 version

PS

x86 version

를 사용하여이 도구의 x86 및 x64 버전을 다운로드 할 수 있습니다 모르겠어 Rainmeter가이 도구를 배포 할 수있는 라이센스에 위배되는 경우.

관련 문제