Вы должны быть шутишь! Буквально через несколько секунд после публикации этого вопроса я решил искать по-другому, и как-то наткнулся на следующее:
[DllImport ("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
приватный статический extern
Приятного кодирования всем - извините за неудобства, которые это могло вызвать.
У меня в данный момент самая странная проблема, которая, как мне показалось, не очень хорошо документирована. Я пытаюсь использовать различные API, такие как CreateFile, ReadFile и т. Д. Через C # .net. У меня был некоторый успех при использовании MessageBox API, но я получаю сообщение об ошибке при попытке сделать то же самое с CreateFile. Я объясню в деталях ниже.
Step 1: Declarations
a) MessageBox Declaration
1) VB6:`// Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long`
2) C#: `public static extern int MessageBox(int hwnd, string lptxt, string lcap, int wType);`
Step 2: C# Usage: `MessageBox(0, "Text", "Caption", 0);
Теперь я покажу вам, что я сделал с API CreateFile, который не работает на данный момент.
Шаг 1: Объявления
а) Объявление CreateFile:
1) VB6:`// Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
2) C#: [DllImport("kernel32")]
public static extern long CreateFile(string lpFileName, long dwDesiredAccess, long dwShareMode, long lpSecurityAttributes, long dwCreationDisposition, long dwFlagsAndAttributes, long hTemplateFile);
Шаг 2: C # Использование: long lFile;
lFile = CreateFile (strIcoPath, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
Ошибка, которую я получаю:
"PInvokeStackImbalance был обнаружен
Сообщение: вызов функции PInvoke «ScanTime Crypter! Public :: CreateFile» разбалансирует стек. Это вероятно потому, что управляемая подпись PInvoke не совпадает с неуправляемой целевой подписью. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи. "
Возможно, кто-то видит то, что я нет. Спасибо всем!