我正在嘗試從 C# 呼叫一個非常簡單的程式集程序以從中回傳一些東西。
這是 C# 代碼:
class Program
{
static void Main(string[] args)
{
ulong test = Start();
Console.WriteLine(test);
}
[DllImport(@"C:\dev\masm\basic.dll")]
private static extern ulong Start();
}
這是程式集(MASM)代碼:
.code
Start proc
mov rax, 1
ret
Start endp
end
我使用以下命令從控制臺組裝和鏈接:
ml64 basic.asm /link /subsystem:console /entry:Start /out:basic.dll /dll /machine:x64
真正有趣的是,我能夠成功呼叫列印“Hello, World!”的簡單程式集程式。但不回傳任何東西。但是,當我嘗試呼叫此程序時,即使我確實在 DLL 中指定了一個入口點,我仍然收到此錯誤:
System.EntryPointNotFoundException: 'Unable to find an entry point named 'Start' in DLL 'C:\dev\masm\basic.dll'.'
我很可能遺漏了一些東西,但我無法弄清楚。
uj5u.com熱心網友回復:
你離得太近了!您需要將該程序標記為匯出。
.code
Start proc export
mov rax, 1
ret
Start endp
end
Console.WriteLine(test);現在列印1。
您可以Start通過使用開發控制臺并DUMPBIN /HEADERS <DLL>在匯出部分運行并查看它來驗證該程序是否已匯出
File Type: DLL
Section contains the following exports for basic.dll
00000000 characteristics
FFFFFFFF time date stamp
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001000 Start
Summary
1000 .rdata
1000 .text
旁白:你得到的錯誤
System.EntryPointNotFoundException: 'Unable to find an entry point named 'Start' in DLL 'C:\dev\masm\basic.dll'.'
實際上與 dll 的入口點(通常稱為 Main)無關,但它是一個 PInvoke 術語,基本上的意思是“嘿,我們找不到您告訴我們要查找的匯出的“Start”方法。”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/360547.html
