Как связать c ++ dll с моей программой на C # - winCE - PullRequest
0 голосов
/ 15 декабря 2009

Мне нужно привязать C ++ DLL к моей программе C # WinCE. (сканер dll)

как я могу это сделать?

Спасибо заранее

Ответы [ 2 ]

3 голосов
/ 15 декабря 2009

Вам нужно использовать Interop для вызова неуправляемого кода.

using System.Runtime.InteropServices; // DllImport
public class Win32 {
  [DllImport("User32.Dll")]
  public static extern void SetWindowText(int h, String s);
}

Вот статья, в которой подробно обсуждается тема (а также откуда взят код).

http://msdn.microsoft.com/en-us/magazine/cc301501.aspx

0 голосов
/ 16 декабря 2009

Альтернативой InterOp является написание C ++ DLL с использованием расширений CLR, которая действует как оболочка для традиционной C ++ DLL. Это дает вам возможность обрабатывать необычные типы, например, пользовательские структуры или классы, если Marshaling не будет работать. (Согласно MSDN вы можете расширить поддержку Marshaling (http://msdn.microsoft.com/en-us/library/bb531313.aspx), но я не пробовал это лично, и в зависимости от того, что вы делаете, это может быть много работы).

Например, если вы хотите получить доступ к DLL, которая экспортирует класс, вы можете иметь DLL-оболочку, которая владеет экземпляром класса C ++ и определяет класс .NET, который отображается на класс C ++. Например, вот фрагмент из C ++ / CLR DLL, который мы используем, чтобы сделать одну из наших старых C ++ DLL доступными в .NET:

// This is the constructor for the CLR (managed) object
FileInf::FileInf()
{
    // Create the C++ (unmanaged) object
    m_pFileInf = gcnew DILib::FileInf();
}

// This is a managed interface which replicates the old 
// unmanaged functionality
bool FileInf::IsDirectory()
{
    return m_pFileInf->IsDirectory();
}

Я бы сказал, что если InterOp работает, то придерживайтесь его, но я не уверен, что это лучший способ решить каждую проблему взаимодействия C ++ / .NET, и это альтернатива.

...