2014-01-17 75 views
1

我從這個網站 http://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w 它創建了一個C代碼,並在C#應用程序消耗創建一個示例應用程序。的DllImport無法在Windows XP SP3,但是可以在Windows 7

#include <stdio.h> 

extern "C" 
{ 
    __declspec(dllexport) void DisplayHelloFromDLL() 
    { 
    printf("Hello from DLL !\n"); 
    } 
} 

的C#代碼:

using System; 
using System.Runtime.InteropServices;  // DLL support 

class HelloWorld 
{ 
    [DllImport("TestLib.dll")] 
    public static extern void DisplayHelloFromDLL(); 

    static void Main() 
    { 
    Console.WriteLine ("This is C# program"); 
    DisplayHelloFromDLL(); 
    } 
} 

這種運作良好,在Windows 7上我已經建立的代碼上的Visual Studio 2010的Windows 7機器上。當我嘗試在Windows XP上運行exe文件時,它失敗,導致出現以下異常:無法加載DLL'TestLib.dll':無法找到指定的模塊。 (來自HRESULT的異常:0x8007007E)

+1

您是否在XP機器上部署了VS2010 C運行時? –

+0

命名執行環境通常是一個好主意。但是,在這種情況下,這使您的觀點變得模糊不清:這與「Windows 7與Windows XP」無關,而是「開發機器與常規機器」。 @Frédéric已經暗示了這一點。 – IInspectable

+0

@FrédéricHamidi不,我沒有在win xp上部署visual studio 2010。 – Eve

回答

1

最可能的解釋是,Windows 7機器安裝了MSVC運行時,但XP機器沒有。

下載VS2010 MSVC運行時的可再發行組件並將其安裝在XP機器上。你的代碼應該可以工作。運行時已經在Windows 7機器上,因爲那是你的開發機器。

FWIW,你的p/invoke不是很正確。它未能指定調用約定。它應該是:

[DllImport("TestLib.dll", CallingConvention=CallingConvention.Cdecl)] 
public static extern void DisplayHelloFromDLL(); 
+0

嗨。我添加了調用約定。仍然沒有運氣。給出相同的錯誤 – Eve

+0

當然不是。這不是你的主要問題。正如我所說的,您應該安裝運行時。 –

+0

我現在也安裝了運行時。但它無法加載DLL。同樣的錯誤。 – Eve

0

在Windows 7上編譯一個簡單的hello world可執行控制檯應用程序,並嘗試在Windows XP上單獨運行該應用程序。它應該比DLL更詳細。它會抱怨它缺少一些DLL或32/64位不匹配。

+0

嗨。我像你說過的那樣嘗試了一個簡單的hello world exe文件。它在兩個工作都很好,沒有任何改變。 – Eve

相關問題