Извините, что спрашиваю об этом здесь, так как я уверен, что на него нужно ответить "там", но я застрял на этом уже несколько месяцев, и ни одно из найденных решений не помогло я.
У меня работает следующий код VB:
Declare Function DeviceSendRead Lib "unmanaged.dll" (ByVal sCommand As String, ByVal sReply As String, ByVal sError As String, ByVal Timeout As Double) As Integer
Dim err As Integer
Dim outstr As String
Dim readstr As String
Dim errstr As String
outstr = txtSend.Text
readstr = Space(4000)
errstr = Space(100)
Timeout = 10
err = DeviceSendRead(outstr, readstr, errstr, Timeout)
и я пытаюсь реализовать это в проекте C #. Лучший эквивалент, который мне удалось найти:
[DllImport("unmanaged.dll")] public static extern int DeviceSendRead(String outstr, StringBuilder readstr, StringBuilder errstr, double Timeout);
int err;
StringBuilder readstr = new StringBuilder(4000);
StringBuilder errstr = new StringBuilder(100);
err = DeviceSendRead(txtSend.Text, readstr, errstr, 10);
Однако, когда я запускаю это, приложение зависает, и я должен принудительно завершить его. Экспериментируя с ref и out, мне иногда удавалось заставить его зависать, а не зависать, но единственный «прогресс», которого я достиг, - заменить вызов функции dll на:
DeviceSendRead(txtSend.Text, null, null, 10);
Это предотвращает сбой, но, конечно, ничего не делает (что я могу обнаружить). Поэтому я предполагаю, что именно способ передачи двух возвращаемых строковых параметров вызывает проблему. Если кто-нибудь может подсказать, что я делаю неправильно, я был бы очень рад это услышать. Спасибо.