2016-07-15 128 views
4

我有一個32位dll,需要從64位.NET核心應用程序調用。C#dllimport當由Process.Start調用時拋出SEHException

我的方法做,這是創建一個32位控制檯應用程序,基本上是這樣的:

[DllImport("x.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] 
static extern int x(int var); 

static void Main(string[] args) 
{ 
    Console.log("I Started!"); 
    int y = x(0); 
    //do something with y. 
} 

然後調用從使用Process.Start("consoleapp.exe")

當我運行我的64位核心應用consoleapp.exe文件,它打印「我開始了!」如預期的那樣,並且x.dll的運行也正確執行。

但是,當我從process.Start()調用consoleapp.exe時,我在「I Started!」之後拋出了SEHException!被打印到輸出(即,當DllImport部分被擊中時)。

這裏是我我開始了我的過程中的64位應用程序

ProcessStartInfo p = new ProcessStartInfo("consoleapp.exe"); 
Process process = Process.Start(p); 
process.WaitForExit(); 

我已經嘗試用戶模擬和運行過程對象作爲管理員,並且它不工作。

該dll文件,x.dll肯定是在consoleapp.exe的工作目錄中,因爲我已經使該進程在工作目錄上執行了console.writeline(),並且它匹配了x.dll文件所在的位置位於。

的SEHException錯誤代碼爲0x80004005的,這是E_FAIL 「未指定失敗」


更新:根據要求,堆棧跟蹤是:

at Consoleapp.Consoleapp.x(int32 var) 
    at Consoleapp.Consoleapp.Main(String[] args) 

不知道如何幫助你。如果你的意思是外部異常的堆棧跟蹤,我不能解決如何訪問(InnerException爲空) - 某種類型的指南可能會幫助我做到這一點。

附加到異常的消息是「外部組件已引發異常。」

x.dll文件讀取CSIDL_COMMON_APPDATA下的子目錄中的文件。當我直接運行程序時,這個變量是正確的,並從web應用程序 - 使用console.log Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)) 讀取文件內容以獲取數據庫位置和憑證以從特定數據庫中讀取。如果任何一部分失敗,x.dll將返回一個錯誤代碼,而不是一個例外,並且我已經通過更改文件,數據庫名稱,記錄號碼等憑據進行了雙重檢查,並且在運行時沒有引發SEHExceptions直。

+2

這完全是過於模糊,至少你得給我們** **確切異常消息和堆棧跟蹤爲AppDomain.CurrentDomain.UnhandledException編寫事件處理程序,以便您獲得更好的診斷不會是可選的。詢問誰寫了DLL來幫助你。 –

+0

您是否顯示您的本地方法的實際簽名?是本機DLL你自己的DLL,你可以共享源代碼或是第三方庫? 它也可能有助於查看['ExternalException.ErrorCode'](https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.externalexception.errorcode.aspx)屬性。 順便說一句,你設置shell執行爲true的任何特定原因?這似乎並不需要。 –

+0

@DirkVollmar - SEHException錯誤代碼與ExternalException.ErrorCode相同。 ShellExecute在這裏是不需要的,不,取出不會改變行爲,儘管 – binderbound

回答

1

讓它

public static extern x(int var); 

和/或嘗試將其指定爲無效

public static extern void x(int var); 
+0

嗨,托馬斯 - 我沒有在原始問題中指定,但簽名返回類型是DLL的int,並且我打算稍後用int來做這些事情。 – binderbound

+0

行 - 沒關係 –

相關問題