Я пытаюсь создать оболочку .net для настраиваемого COM-интерфейса.
Интерфейс определяется следующим образом в C ++:
DECLARE_INTERFACE_(IDumpAsf, IUnknown)
{
STDMETHOD(get_UserParams) (THIS_
int *is_auto_start,
int *fileSize,
int *packetSize,
char *baseName,
char *filePath
) PURE;
STDMETHOD(set_UserParams) (THIS_
int is_auto_start,
int fileSize,
int packetSize,
char *baseName,
char *filePath
) PURE;
STDMETHOD(enable_Run) (THIS_
bool is_run
) PURE;
};
И я объявил интерфейс какэто в C #:
public interface IDumpASF
{
[PreserveSig]
int get_UserParams(
[Out] out int is_auto_start,
[Out] out int fileSize,
[Out] out int packetSize,
[Out] out System.Sbyte baseName,
[Out] out System.SByte filePath
);
[PreserveSig]
int set_UserParams(
[In] int is_auto_start,
[In] int fileSize,
[In] int packetSize,
[In] string baseName,
[In] string filePath
);
[PreserveSig]
int enable_Run([In] bool a);
}
Пример использования таков:
int is_auto_start;
int fileSize;
int packetSize;
SByte baseName;
SByte filePath;
IDumpASF dump = (IDumpASF)asfWriter;
dump.get_UserParams(out is_auto_start, out fileSize, out packetSize, out baseName, out filePath);
Я могу собрать и запустить душ, но я не понимаю, какПредположим, чтобы получить все символы для baseName и filePath.Когда я посылаю SByte, он возвращает первый символ, но как мне получить остальные?Я пробовал несколько других типов, таких как Sbyte [], String, StringBuilder и IntPtr.Всякий раз, когда я пытаюсь преобразовать их в строку, я получаю AccessViolationException.
Могу поспорить, есть кое-что глупое, что я пропустил, но мои пациенты здесь истощаются.
Любая помощь будет очень ценной!
-Svein