C++ dll在VS2010项目中工作正常,但在VS6应用程序中会出现访问冲突

C++ dll在VS2010项目中工作正常,但在VS6应用程序中会出现访问冲突,c++,visual-studio-2010,dll,access-violation,visual-studio-6,C++,Visual Studio 2010,Dll,Access Violation,Visual Studio 6,在过去的几周里,我一直在为一个usb设备创建一个dll,这个设备自带了自己的dll,我用它在VS2010中创建了自己的dll,然后我在2010年创建了一个测试应用程序,使用这个dll使它工作。它工作得很好,但是我现在需要在VS6项目中使用它,当我使用它时,我会遇到访问冲突,我在VS6中重新创建了dll,看看这是否有帮助,它允许我进入代码,一旦它到达我的dll中调用第三方dll的行,它就会导致访问冲突,我刚刚尝试创建一个工厂函数来创建dll的抽象接口,但我再次遇到访问冲突。我是DLL的新手,完全没

在过去的几周里,我一直在为一个usb设备创建一个dll,这个设备自带了自己的dll,我用它在VS2010中创建了自己的dll,然后我在2010年创建了一个测试应用程序,使用这个dll使它工作。它工作得很好,但是我现在需要在VS6项目中使用它,当我使用它时,我会遇到访问冲突,我在VS6中重新创建了dll,看看这是否有帮助,它允许我进入代码,一旦它到达我的dll中调用第三方dll的行,它就会导致访问冲突,我刚刚尝试创建一个工厂函数来创建dll的抽象接口,但我再次遇到访问冲突。我是DLL的新手,完全没有想法,我非常感谢您的帮助或见解

使用更高版本的Visual Studio创建的DLL与Visual Studio 6配合使用的方法是,根据传递并返回给DLL导出函数的参数,以通用方式对DLL进行编码

例如,Windows API描述了某些变量类型。这些类型包括
DWORD
LONG
BOOL
DWORD\u PTR
等。包括各种字符串指针类型,如
LPCSTR
。此列表中还包括指向这些不同类型的指针,如
LPLONG
LPBYTE
LPVOID

如果DLL的导出函数传递或返回的类型不是上述类型之一,则您将陷入困境--DLL只能在使用与生成DLL相同版本的Visual Studio生成的应用程序中安全使用


例如,如果您正在传递C++对象(标准库对象,甚至您自己的对象),如果您希望DLL跨多个VisualStudio版本工作,那将是一个很大的不。p> 如果要从导出的DLL函数传递或返回值,则这些值必须是通用窗口的类型,例如

LONG
DWORD
BOOL
,以及指向这些类型的指针。如果你通过C++类,那么你就不走运了。您需要编译VS6的所有内容。在DLL之间的C++接口不是二进制兼容的。你正在混合运行库,这是不好的。就您的情况而言,从VC6到VS2010是非常糟糕的,VC6运行时和VS2010运行时之间有很多不同。VC6真的很旧,你的第三方DLL也不应该用VC6编写。您可能需要更新VC 6项目到VC 2010.非常感谢您的帮助,我现在还有一些事情要尝试:),DLL在自己内部使用C++对象行吗?只要它不尝试传递并返回这些变量,而不首先将它们转换回其中一种类型,那么?@PerryWard好的一面是DLL可以在内部使用任何东西(模板、异常、STL、boost等)。