본문 바로가기

프로그래밍 언어 노트/F#

[F#/C#] Native Dll Load 하기

C# 에서 C++ Dll 이야 다들 많이 사용하기때문에

docs.microsoft.com/ko-kr/dotnet/framework/interop/consuming-unmanaged-dll-functions

 

관리되지 않는 DLL 함수 사용

관리 코드에서 DLL 라이브러리에 구현된 관리되지 않는 함수를 호출할 수 있도록 하는 플랫폼 호출 서비스를 사용하여 관리되지 않는 DLL 함수를 사용합니다.

docs.microsoft.com

해당 파트를 보면 C#/ VB/ C++ 에 대한 설명이 나오는데

어이없게 F#만 설명이 쏙 빠져있다..

F# 설명만 쏙 빠져있다

 

C# 이든  F# 이든 DllImportAttribute 를 사용하는거는 똑같으니까 똑같이 사용하면 되긴하는데.. 고거 한줄 추가하는게 뭐가 어렵다고 빼놓았는지 모르겠다..

F# 에서 Dll 를 사용하는 문서는 docs.microsoft.com/ko-kr/dotnet/fsharp/language-reference/functions/external-functions 여기 위치해있으며

[<DllImport(@"C:\bin\nativedll", CallingConvention = CallingConvention.Cdecl)>]
 extern void HelloWorld()

뭐 이런식으로 쓸수있다.

F# 문법이 아니라 그냥 C++/C# 스타일의 함수 선언을 그대로 적으면되고,

C# 에서 out 으로 선언하던것은 &  레퍼런스를 걸면된다.

//C#
[DllImport("user32.dll", SetLastError = true)]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
        
//F#
[<DllImport("user32.dll", SetLastError = true)>]
extern UInt32 GetWindowThreadProcessId(IntPtr hWnd, UInt32& lpdwProcessId);

 

 

728x90