2014-11-10 7 views
2

У меня есть C++ DLL с частичной документацией и без доступа к исходному коду. Мне нужно использовать функции этой библиотеки C++ в моем приложении C#. Это то, что я до сих пор:Преобразование функции C++ для использования в C#

[DllImport(cpplib.dll)] 
public static extern long someFunctionsWithNoParameters(); 

Когда я объявляю и вызвать функцию из ++ DLL C в моей C# приложение, как это (функция без аргументов) и чем это называют, это работает, функция возвращает длинное значение, возвращаемое функцией C++.

Однако я не знаю, как обращаться с функциями с указателями или ссылочными параметрами или параметрами, определяемыми как функция C++, так и внутри. Например, эта функция C++:

long functionWithParameters(long &State, char *pName, int nLen) 

Это, как объявляется функция (у меня есть доступ к файлу заголовка DLL, но не к источнику). Параметры State и pName объявляются как выходные параметры, а параметр nLen объявлен как параметр. Как объявить эту функцию C++ в моем приложении C# в строке [DllImport] и использовать ее (какую форму параметров я должен пройти и как читать параметры вывода)? Существует ли какое-либо соглашение о конверсии между указателями C++ и ссылочными типами для некоторых типов C#?

Спасибо!

+0

Вопрос слишком широк, чтобы ответить здесь. См. Http://msdn.microsoft.com/en-us/library/ms173184.aspx. Задавайте конкретные вопросы по мере их появления. –

ответ

1

Вам необходимо объявить соглашение о соглашении для импортируемой функции. Вы можете попробовать __cdecl или __stdcall, как это:

[DllImport(cpplib.dll, CallingConvention=CallingConvention.Cdecl)] 
public static extern long someFunctionsWithNoParameters(); 

О указателях и ссылок (которые являются одинаковыми в большинстве практических реализаций), вам нужно использовать небезопасный контекст и C# указателей, обратитесь к MSDN для более детальной информации.

+2

"* О указателях и ссылках (которые одинаковы в большинстве практических реализаций), вам нужно использовать небезопасный контекст и указатели на C# *« Нет, 'ref' будет отлично работать для ссылок, а' out' или 'ref' может быть используется для указателей. – ildjarn

+0

Ах, хорошо, я запомню это ^^ – Kelm

+0

Да, спасибо вам обоим :) –

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