2013-11-25 3 views
1

Я хочу использовать C# для вызова dll-файла C++ для получения данных.Как обрабатывать char ** в C#

В C++

extern "C" int _DLLExport Process_Read(char **msg); 

В C#

[DllImport("ProcessExport")] 
public static extern int Process_Read(ref string msg); 

=================

string msg; 
int msg_len = 0; 
msg_len = Process_Read(ref msg); 

=================

Как coul d Я показываю данные msg? Спасибо.

+4

Не уверен, что вы подразумеваете под 'show data' - вы пробовали' Console.WriteLine (msg) '* после * ваш вызов' Process_Read (..) '? –

ответ

2

DllImport может использоваться только для импорта функций C, а не методов класса C++ (даже если они являются статическими).

Если это объект C++ com, если вы зарегистрируете его с помощью regsvr32, вы можете добавить ссылку на dll на вкладку ссылок на визуальную студию com, и обычно визуальная студия создает dll (я думаю, что это называется оболочкой, вызываемой вызовом), которую вы можете see создается с именемoflibrary.interop.dll. Таким образом, MyExecRefsDll.dll, если был комком, станет MyExexRefs.Interop.dll. Но когда вы добавляете эталонную визуальную студию, вы автоматически делаете это автоматически в управляемом коде. Если вы создаете dll C++ в качестве объекта com, используя шаблон atl в C++, проще получить доступ из dotnet (Iam, ссылающийся на неуправляемый код C++ из dll, который ссылается на другой файл dll.) Нет кода, скопированного со второй dll. Я просто ссылаюсь на tlb , Пб файл DLL и Visual Studio делает все остальное

Взгляните на этом уроке это делает процесс ясно, как хрустальный шар:. http://www.codeproject.com/Articles/505791/A-Beginner-Tutorial-for-Writing-Simple-COM-ATL-DLL?q=creating+an+atl+dll+c%2b%2b

Просто помните, чтобы найти TLB и Лив (обычно в папке, где создается другая dll после компиляции.) и ссылайтесь на них, щелкнув правой кнопкой мыши в проводнике решений и добавьте-> существующий элемент для второй dll, на который ссылается главная dll. dll (всегда коп y новые версии их в папку проектов каждый раз, когда вы обновляете код во вторую dll).

Смежные вопросы