Маршалинг работает странно
От: snowpard  
Дата: 23.09.14 09:27
Оценка:
Делаю маршалинг из с++ dll
Простейший тестовый проект:

В с++ dll'ке одна export-функция

extern "C" void __declspec(dllexport) Calc()
{
}


В c# её вызов:

[DllImport(@"cppdll.dll")]
private static extern void Calc();
private void Button_Click(object sender, RoutedEventArgs e)
{
    Calc();
    MessageBox.Show("OK");
}


Проблема: на одном компе программа отрабатывает нормально (Появляется MessageBox), на другом вылетает на вызове Calc(). На обоих компах Windows 7.

В сгенеренном виндой xml-файле ошибки, указана причина — DllNotFoundException. Почему на другом компе dll'ка вдруг не находится? В обоих случаях exe и dll лежат рядышком в одной папке.
Re: Маршалинг работает странно
От: bnk СССР http://unmanagedvisio.com/
Дата: 23.09.14 09:42
Оценка:
Здравствуйте, snowpard, Вы писали:

S>В сгенеренном виндой xml-файле ошибки, указана причина — DllNotFoundException. Почему на другом компе dll'ка вдруг не находится? В обоих случаях exe и dll лежат рядышком в одной папке.


Может одна винда 64 бита, другая 32?
Re[2]: Маршалинг работает странно
От: snowpard  
Дата: 23.09.14 09:44
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Здравствуйте, snowpard, Вы писали:


S>>В сгенеренном виндой xml-файле ошибки, указана причина — DllNotFoundException. Почему на другом компе dll'ка вдруг не находится? В обоих случаях exe и dll лежат рядышком в одной папке.


bnk>Может одна винда 64 бита, другая 32?


Нет, обе 32.
Re: Маршалинг работает странно
От: Fortnum  
Дата: 23.09.14 09:58
Оценка: 18 (1) +2
Здравствуйте, snowpard, Вы писали:

S>В сгенеренном виндой xml-файле ошибки, указана причина — DllNotFoundException. Почему на другом компе dll'ка вдруг не находится? В обоих случаях exe и dll лежат рядышком в одной папке.


Может твоя DLL-ка завязана на какую-то другую DLL-ку, которая на одной машине находится, а на другой нет? Попробуй http://www.dependencywalker.com/
Re[3]: Маршалинг работает странно
От: bnk СССР http://unmanagedvisio.com/
Дата: 23.09.14 09:59
Оценка: 18 (1) +4
Здравствуйте, snowpard, Вы писали:

S>Нет, обе 32.


Может тогда зависимая DLL не найдена. Рантайм C++ (если требуется для DLL — она у тебя как скомпилирована) установлен?
Попробуй посмотреть DEPENDS-ом, что твоей DLL нужно.
Re[2]: Маршалинг работает странно
От: snowpard  
Дата: 23.09.14 10:46
Оценка:
Здравствуйте, Fortnum, Вы писали:

F>Здравствуйте, snowpard, Вы писали:


S>>В сгенеренном виндой xml-файле ошибки, указана причина — DllNotFoundException. Почему на другом компе dll'ка вдруг не находится? В обоих случаях exe и dll лежат рядышком в одной папке.


F>Может твоя DLL-ка завязана на какую-то другую DLL-ку, которая на одной машине находится, а на другой нет? Попробуй http://www.dependencywalker.com/


Точно! "msvcr120.dll" нужна была! Её ведь можно статически прилинковать?

Спасибо всем за помощь!
Re[3]: Маршалинг работает странно
От: bnk СССР http://unmanagedvisio.com/
Дата: 23.09.14 11:12
Оценка:
Здравствуйте, snowpard, Вы писали:

S>Точно! "msvcr120.dll" нужна была! Её ведь можно статически прилинковать?


Project Settings -> C++ -> Code Generation -> Runtime Library -> (выбрать НЕ DLL)
Re[4]: Маршалинг работает странно
От: snowpard  
Дата: 23.09.14 11:30
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Здравствуйте, snowpard, Вы писали:


S>>Точно! "msvcr120.dll" нужна была! Её ведь можно статически прилинковать?


bnk>Project Settings -> C++ -> Code Generation -> Runtime Library -> (выбрать НЕ DLL)


Спасибо огромное! Теперь заработал не только тестовый, но и рабочий проект !
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.