Ради обучения я пытаюсь вызвать функцию сборки из С#. Я работаю над очень стерильным проектом, делая все настолько просто, насколько могу. Вот моя сборка (в основном вырезана и вставлена из codeproject):
.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
Примечание. Сборка строится просто отлично. Никаких ошибок, и единственное предупреждение состоит в том, что в masm32rt.inc есть еще одна строка .model
, которую ассемблер игнорирует, это предупреждение в порядке. Я настроил свою среду, используя эти инструкции. .
Для C#, языка, с которым я знаком гораздо лучше, я пробовал 2 основных подхода: отражение и добавление DLL в качестве ссылки. Оба дают мне сообщение об ошибке, говорящее о том, что ожидается манифест сборки. Тут я в растерянности.
Мой С# просто:
Assembly mylib = Assembly.LoadFile(@"C:\mypath\MyLib.dll");
И я получаю The module was expected to contain an assembly manifest. (Exception from HRESULT: 0x80131018)
как ошибку в этой строке. Я ничего не знаю о сборочных манифестах. Любое направление к тому, как создать и внедрить его, будет оценено по достоинству.
MASM
, вы создаетеnative
код, на который нельзя напрямую ссылаться из приложений .Net. Вы должныpinvoke
. Возможно, вам нужноilasm
- person L.B   schedule 13.08.2012