Я создавал dll для USB-устройства за последние несколько недель, устройство поставлялось с собственной dll, которую я использовал для создания своей собственной dll в VS2010, затем я создал тестовое приложение, которое использует указанную dll в 2010 году, чтобы заставить его работать . Он работает хорошо, однако теперь мне нужно использовать его в проекте VS6, когда я его использую, я получаю нарушения прав доступа, я воссоздал dll в VS6, чтобы посмотреть, поможет ли это, это позволило мне войти в код, как только он попадает в строку в моей dll, которая вызывает стороннюю dll, это вызывает нарушение прав доступа, я только что попытался создать фабричную функцию для создания абстрактного интерфейса для моей dll, но я снова получаю нарушения прав доступа. Я новичок в dll, и у меня совершенно нет идей, и помощь или понимание будут очень полезны...
dll отлично работает в проекте VS2010, но дает нарушения прав доступа в приложении VS6.
Ответы (1)
Чтобы заставить DLL, созданную в более поздней версии Visual Studio, работать с Visual Studio 6, можно закодировать DLL в общем виде с точки зрения параметров, передаваемых и возвращаемых в экспортированные функции DLL.
Например, Windows API описывает определенные типы переменных. Эти типы включают DWORD
, LONG
, BOOL
, DWORD_PTR
и т. д. Включены различные типы указателей строк, такие как LPCSTR
. Также в этот список включены указатели на эти различные типы, такие как LPLONG
, LPBYTE
, LPVOID
и т. д.
Если экспортированные функции вашей DLL передают или возвращают тип, отличный от одного из перечисленных выше, то вы застряли — DLL можно безопасно использовать только в приложении, которое было создано с той же версией Visual Studio, что и DLL. построен с.
Например, если вы передаете объекты C++ (объекты стандартной библиотеки или даже ваши собственные объекты), это недопустимо, если вы хотите, чтобы эта DLL работала в нескольких версиях Visual Studio.
LONG
,DWORD
,BOOL
и т. д., и указателями на эти типы. Если вы передаете классы С++, то вам не повезло. Вам нужно скомпилировать все для VS6. - person PaulMcKenzie   schedule 14.08.2014