[英]“Hello World” via PInvoke
我正在嘗試在C#中創建一些需要調用一些非托管DLL的東西,這個過程對我一無所知! 我發現了一個“Hello World”教程 ,應該像從底部復制和粘貼幾行代碼一樣簡單:
using System;
using System.Runtime.InteropServices;
namespace PInvokeTest
{
class Program
{
[DllImport("msvcrt40.dll")]
public static extern int printf(string format, __arglist);
public static void Main()
{
printf("Hello %s!\n", __arglist("World"));
Console.ReadKey();
}
}
}
這會編譯並運行完成而不會出現任何錯誤,但是到達ReadKey()
時不會打印任何內容。
我錯過了一些重要的設置步驟嗎? 該項目是為.NET 4.6.1構建的(如果對DLL版本控制很重要)。
你正在使用的msvcrt*
版本可能就是問題所在。 如果我使用未修改的代碼創建一個控制台應用程序,我會得到相同的結果 - 沒有輸出。
如果我將引用的dll從msvcrt40.dll
為msvcr120.dll
那么我會看到預期的輸出。
[DllImport("msvcr120.dll")]
public static extern int printf(string format, __arglist);
public static void Main()
{
printf("Hello %s!\n", __arglist("World"));
Console.ReadKey();
}
msvcrt*
的各種編號版本跟蹤Visual Studio的版本:
這種版本編號方法在VS2015中發生了變化,這是由於這造成了混亂和脆弱的依賴鏈。 有關這些更改的更多信息,請訪問:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.