2015-07-22 4 views
0

Я создал C++ * .dll в VS 2013. Это отлично работает на моей машине разработки, однако это вызывает ошибку при запуске на клиентской машине.Невозможно загрузить проблему библиотеки с внешними зависимостями

enter image description here

Вот файл каст.

#include "stdafx.h" 
#include "EasyDLL.h" 

using namespace System; 

double WINEXPORT EASYDLL_GetServerDateTime(int clientServerTimeDiff) 
{ 
    System::DateTime clientDateTime = System::DateTime::Now; 
    System::TimeSpan duration(0, 0, clientServerTimeDiff); 
    System::DateTime serverDateTime = clientDateTime.Add(duration); 

    String^ strTemp = serverDateTime.ToString("yyyyMMddHHmmss"); 

    double result = double::Parse(strTemp); 

    return result; 
} 

Я считаю, что причина в том, что внешние зависимости не существуют на машине клиента.

У меня нет большого опыта работы с C++.

Свинец до вопроса:
При компиляции (и я просто компиляция в отлаживать на данный момент), есть целая куча файлов заголовков в зависимости от внешних и длл (mscorlib.dll).

Файл mscorlib.dll существует на том же месте на клиентской машине, поэтому я отношусь к дисконтированию как к проблеме, но заголовки не существуют.

Вопрос:
Нужно ли отправлять эти заголовки с помощью dll, которые я создал, или они должны быть скомпилированы в мою dll?

Вот скриншот некоторых внешних зависимостей. Большинство из них, по-видимому, находятся в проекте по умолчанию, когда проект был создан.
enter image description here

EDIT:

После изменения проекта, чтобы выпустить это, кажется, работает на другом компьютере, а также мой Dev машины, необходимо дождаться, чтобы завтра, чтобы проверить на клиента.

Несмотря на то, что он работал до сих пор, я проверил DependencyWalker и получил следующее, глядя на мою dll, это что-то, о чем можно беспокоиться?

enter image description here

+1

Проблема заключается в том, что вы строите отладочную сборку, а на другой машине, которую вы используете, не имеет отладочной версии установленной среды выполнения? –

+0

Создайте версию выпуска. Запустите 'depend.exe' на выходе, чтобы узнать, каковы ваши внешние зависимости. Если ваша DLL проста и не обменивает владельца указателей кучи со своим вызывающим абонентом, тогда просто установите проект для статической сборки на ЭЛТ. –

+0

Привет Энди, где бы я нашел depend.exe? – Hank

ответ

1

Вам не нужно грузить заголовки с DLL. Если ответ Матс не решит его, вы можете попробовать использовать этот инструмент: http://www.dependencywalker.com/ Вы можете «заглянуть внутрь» DLL таким образом. По моему опыту, лучше всего запускать его на обеих машинах, то есть на машине dev и на клиентской машине, поскольку то, что может выглядеть как ошибка на клиентской машине, может также существовать на машине dev, тем самым снижая ее как проблему. Удачи!

+0

Спасибо, Спирос, я добавил свои выводы в конце вопроса. – Hank

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