[英]Excel 2016 VSTO Addin With Native Code DLL
使用來自第三方的SDK創建Excel插件。 SDK包含本機代碼DLL(32位和64位版本)。 我的插件代碼在C#中,並且看起來只有在“AnyCPU”選項下編譯時才會運行插件。
當我嘗試運行應用程序時,我得到“嘗試加載格式不正確的程序。(HRESULT異常:0x8007000B)”這通常意味着64/32不匹配,錯誤來自於嘗試加載第3個派對本機代碼DLL。
我的問題是:我對AnyCPU的假設是否正確,是否有辦法從AnyCPU下編譯的插件運行本機代碼DLL? 謝謝!
在.net 4.5之前,AnyCPU依賴於您當前的編譯機器。 如果您的機器是32位CPU,AnyCPU將編譯您的程序為32位程序。 如果它是64位CPU,它將編譯為64位。
在.net 4.5之后,AnyCPU改變了:
如果你希望你的程序可以運行32位和64位cpu,你應該將本機代碼DLL與32位版本鏈接,否則你需要在單獨的CPU中編譯它們
是的,您可以創建一些包裝函數,根據當前體系結構將調用重定向到本機dll,例如:
[DllImport("bin32\\Native86Dll", EntryPoint = "MyFunc", CharSet = CharSet.Ansi, ExactSpelling = true)]
public static extern int MyFunc_32(string sCommand);
[DllImport("bin64\\Native64Dll", EntryPoint = "MyFunc", CharSet = CharSet.Ansi, ExactSpelling = true)]
public static extern int MyFunc_64(string sCommand);
public static int MyFunc(string sCommand )
{
return System.Environment.Is64BitProcess ? MyFunc_64(sCommand) : MyFunc_32(sCommand);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.