С ++ DLL не работает при запуске с другой буквы диска - PullRequest
0 голосов
/ 02 декабря 2009

Я написал C ++ DLL, которая подключается к базе данных Sybase с использованием собственной библиотеки C для Sybase. Я могу собрать и запустить программу на своем диске C, а другие могут запустить ее со своих дисков C, и все работает. Но в некоторых ситуациях моя DLL и библиотека Sybase находятся на диске F, а не на диске C. В этих случаях моя DLL, очевидно, не может загрузить Sybase DLL.

Мне немного непонятно, как работает связывание, но, исходя из моего неполного понимания, я предпочитаю, что расположение C-диска в DLL - это то, что встроено в конечную DLL, что и приводит к ее отказу, когда он запускается с другой буквы диска. Это звучит как разумное объяснение? Какие-либо другие причины, по которым моя DLL не сможет загрузить Sybase DLL при запуске с другой буквы диска? Любая идея, как я могу решить это?

РЕДАКТИРОВАТЬ: Оказывается, это был неправильный вопрос, но это привело меня в правильном направлении. Sybase DLL использует INI-файл для определения деталей соединения с базой данных, и у меня был путь к этому жестко запрограммированному на диске C.

Ответы [ 3 ]

1 голос
/ 02 декабря 2009

Вообще говоря, абсолютные местоположения не используются внутри DLL. Хранится только имя DLL.

Места, где система ищет DLL, описаны здесь: http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx

Хотя возможно загрузить DLL по абсолютному пути - с помощью метода, известного как загрузка DLL во время выполнения - но я подозреваю, что не многие программы делают это.

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

это место, где ваша DLL и Sybase DLL хранятся в переменной PATH?

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

Является ли это .net и является ли диск F сетевым диском? Есть некоторые проблемы безопасности в некоторых версиях Windows, когда вы делаете копию .net exe на сетевой диск и пытаетесь запустить код. Операционная система не позволяет ему работать. Я ожидаю, что это ваша проблема.

...