Приложение .NET вызывает неуправляемую DLL, параметры содержат странные символыC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Приложение .NET вызывает неуправляемую DLL, параметры содержат странные символы

Сообщение Anonymous »

Я пишу приложение .NET для вызова неуправляемой библиотеки DLL (Unicode).
Ниже приведен заголовок неуправляемой библиотеки DLL:

Код: Выделить всё

#pragma once

#ifdef __cplusplus
extern "C" {
#endif  /* __cplusplus */

//  Callback function for ProcessFileAPI. The function is called whenever progress advances.
typedef VOID (CALLBACK* LPPROGRESSPROC)(CONST BYTE btProgress, LPVOID lParam);

#pragma pack(1)

//  Options for ProcessFileAPI
typedef struct _OPTIONS1
{
BOOL m_bOption1;
BOOL m_bOption2;
} OPTIONS1, *LPOPTIONS1;

#pragma pack()

DWORD WINAPI ProcessFileAPI(LPCTSTR lpSrcFileName, LPCTSTR lpDstFileName, LPPROGRESSPROC lpProgressProc, LPVOID lpProgProcParam,
LPBOOL pbCancel, CONST LPOPTIONS1 lpOptions1);

#ifdef __cplusplus
}
#endif
И .cpp для неуправляемой DLL:

Код: Выделить всё

extern "C"  DWORD WINAPI ProcessFileAPI(LPCTSTR lpSrcFileName, LPCTSTR lpDstFileName, LPPROGRESSPROC lpProgressProc, LPVOID lpProgProcParam,
LPBOOL pbCancel, CONST LPOPTIONS1 lpOptions1)
{
TRACE(_T("SrcFileName: %s. DstFileName: %s."), lpSrcFileName, lpDstFileName);
return  0;
}
Ниже приведен код .NET для этой функции:

Код: Выделить всё

using System;
using System.Runtime.InteropServices;

namespace SDKAPI
{
public struct TOptions1
{
public bool bOption1;
public bool bOption2;
}   // end TOptions1

public delegate void TProgressProc(byte btProgress, IntPtr lParam);
}

namespace SDKAPI.Units
{
public class SDKAPI
{
[DllImport("SDK.DLL")]
public static extern uint ProcessFileAPI(string lpSrcFileName, string lpDstFileName, TProgressProc pgrsproc, IntPtr lpProgProcParam, ref int pbCancel, ref TOptions1 options);

} // end SDKAPI
}
А ниже приведен вызов функции:

Код: Выделить всё

Options1.bOption1 = true;
Options1.bOption2 = false;

// Process the file
FCancel = 0;

RetCode = SDKAPI.Units.SDKAPI.ProcessFileAPI(txtSrcFile.Text, txtDstFile.Text, new SDKAPI.TProgressProc(this.ProgressProc), IntPtr.Zero, ref FCancel, ref Options1);
При вызове DLL с помощью txtSrcFile.Text = "a" и txtDstFile.Text = "b", но я отлаживаю DLL и нахожу параметр lpSrcFileName становится «a», за которым следует множество странных символов. Почему?


Подробнее здесь: https://stackoverflow.com/questions/782 ... characters
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»