학습을 위해 C#에서 어셈블리 함수를 호출하려고합니다. 나는 가능한 한 모든 것을하는 매우 살균적인 프로젝트에서 일하고 있습니다.C#에서 MASM 어셈블리 DLL 호출
.386
.model flat, stdcall
option casemap :none
include \masm32\include\masm32rt.inc
.code
LibMain proc instance:dword,reason:dword,unused:dword
mov eax,1
ret
LibMain endp
PrintMess proc
print "Test"
exit
PrintMess endp
End LibMain
참고 : 여기에 (대부분 잘라 codeproject에서 붙여 넣기) 내 조립의 조립이 잘 구축합니다. 오류가없고 masm32rt.inc에 어셈블러가 무시하는 다른 .model
행이 있다는 경고 만 표시됩니다.이 경고는 정상입니다. these instructions을 사용하여 환경을 설정했습니다.
C# 언어의 경우 훨씬 익숙한 데 반해 Reflection과 DLL을 참조로 추가하는 두 가지 방법을 시도했습니다. 둘 다 어셈블리 매니페스트가 필요하다는 오류를 나에게줍니다. 여기 나는 잃어 버렸어.
Assembly mylib = Assembly.LoadFile(@"C:\mypath\MyLib.dll");
그리고 그 라인에 오류로 The module was expected to contain an assembly manifest. (Exception from HRESULT: 0x80131018)
을 얻을 :
내 C#을 단순히. 어셈블리 매니페스트에 대해서는 아무 것도 모른다. 하나를 생성하고 삽입하는 방법에 대한 모든 방향을 이해할 수 있습니다.
'MASM'을 사용하면 .Net 어플리케이션에서 직접 참조 할 수없는'native' 코드를 생성합니다. 당신은 당신이'pinvoke'해야합니다. 어쩌면 당신이 ilasm 뒤에 무엇입니까 –
왜 내가 pinvoke 시도하지 않았다. 그것은 효과가 있었다. 답변을 제출하면 크레딧을 받게됩니다. –