P / Invoke Runtime Errors - PullRequest
       6

P / Invoke Runtime Errors

0 голосов
/ 27 ноября 2011

Я пытаюсь создать управляемую оболочку вокруг DLL C ++.Когда я пытаюсь запустить тестовое приложение, я получаю сообщение об ошибке загрузки DLL.Это оказывается проблемой при попытке найти ЭЛТ.Копирование CRT в тот же каталог проходит мимо этой проблемы, но затем выдает ошибку, говорящую о том, что приложение неправильно загрузило среду выполнения C (R6034).У нативной программы C ++ нет проблем с любой из этих проблем.

DLL была скомпилирована с vc 2008 - управляемый код скомпилирован в 2010 году.

DLL имеет манифест, и я попыталсяКопирование точной версии CRT в рабочий каталог с тем же результатом, что и выше.

Мои вопросы:

  1. Почему нативная программа может загружать CRT, но управляемую оболочкуне могу найти его?
  2. Где я могу найти что-то, чтобы попытаться исправить вторую ошибку о загрузке CRT?Может ли это быть из-за искажения имени, CallingConvention и т. Д.?

Код C ++ (у меня есть только заголовок):

class Foo {
public:
   static void startCall(std::string hostname);
}

Код C #:

    [DllImport("mydll.dll")]
    public static extern void startCall(string hostname );

    public Test()
    {
        string hostname = "";
        startCall(hostname);
    }

1 Ответ

0 голосов
/ 05 декабря 2011

Насколько я знаю, невозможно использовать STL в интерфейсах функций, если вы хотите использовать функции в C #.

Если вы можете изменить интерфейс библиотеки C ++, измените его на использование char * вместо строк. Если вы не можете написать прокси-библиотеку, которая предоставляет интерфейс с символом char * и преобразует его в std :: string, а затем вызывает библиотеку c ++, которая имеет функции с std :: string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...