C # Использование VB6 API - PullRequest
0 голосов
/ 05 мая 2011

Вы должны быть шутишь! Буквально через несколько секунд после публикации этого вопроса я решил искать по-другому, и как-то наткнулся на следующее: [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 соответствуют целевой неуправляемой подписи. "

Возможно, кто-то видит то, что я нет. Спасибо всем!

Ответы [ 2 ]

5 голосов
/ 05 мая 2011

Было бы намного проще изучить идиоматический способ создания файла в .Net, чем выполнять буквальный построчный перевод какого-то старого кода. Он ведет вас по удивительно окольному маршруту.

0 голосов
/ 05 мая 2011

Создать файл C # решение:

using System.IO;
// ...

File.Create(@"myfilename.ext");

MessageBox C # решение:

using System.Windows.Forms;
// ...
MessageBox.Show("Message box message.", "My caption.");
// and other various overloads

Fin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...