我正在使用DUMPBIN实用程序从c++dll中获取损坏的名称以在c#应用程序中使用。我正在使用__declspec(dllexport)公开一个C++类成员函数,输出的名称结果如下所示?InitPort@CProtocolStack@@QAEEHEPAEKE@Z=?InitPort@CProtocolStack@@QAEEHEPAEKE@Z(public:unsignedchar__thiscallCProtocolStack::InitPort(int,unsignedchar,unsignedchar*,unsignedlong,unsignedchar))导入相同函数时是否需要
我继承了一个C++项目,我需要将它转换成一个DLL,以便在其他项目中使用它。代码在VisualStudio2010解决方案中构建。我能够编译它并生成一个DLL文件,但没有关联的lib文件。我不是Windows开发者,但是好像需要导出我想要使用的函数,有两种方式:Using__declspec(dllexport)UsingaDEFfile第一个选项意味着在我要导出的每个类或函数前面手动添加__declspec(ddlexport)。由于有很多类,而且我无法控制要链接到库的所有应用程序,因此第二个选项(DEF文件)看起来更有希望。有没有办法从现有的DLL文件生成DEF文件?我尝试了不同的
我已经创建了Dll项目。我创建了具有一个功能的myasm.asm文件:.486.modelflat,stdcall.codeMyProc1procx:DWORD,y:DWORDxoreax,eax//......//retMyProc1endpend这是我的头文件:#pragmaonce#include#ifdefLAB1DLL_EXPORTS#defineLAB1DLL_API__declspec(dllexport)#else#defineLAB1DLL_API__declspec(dllimport)#endifextern"C"{LAB1DLL_APIint_stdcallMy
现在我分析一些不是我写的旧代码。在header中有许多这样的声明:SVPDSDKDLLEXPORTinlineC3vecmult(C3vecsrc,D3DXMATRIX&m);SVPDSDKDLLEXPORT定义为_declspec(dllexport),如果在SVPDSDK中使用;as_declspec(dllimport),如果它用于任何使用SVPDSDK.dll的项目。在这里内联对我来说似乎很奇怪,因为标题中没有定义,它在.cpp文件中,但是SVPDSDK的编译和链接以及使用各自DLL的所有项目都可以毫无问题地执行。我假设,它只是被忽略并且函数被导出,就好像它没有被内联一样。我发
是否有一种可能未记录的方法来阻止链接器为DLL或EXE创建IMPLIB,尽管源代码中有__declspec(dllexport)指令?不指定/IMPLIB会导致.LIB使用默认名称创建。当declspec指令来自不受控制的第3方代码时,这一点很重要。例如,boost::serialization就是这种情况。一种可能的解决方案是“取消声明”DLL导出的方法。DEF文件也不能这样做(AFAIK),因为它只能添加到导出列表而不能从中删除。 最佳答案 许多第3方代码不直接使用__declspec(dllexport),而是将其隐藏在宏下以
我有一个相当大的Core项目,我正在尝试调整它以使用我构建的DLL引擎,我遇到了一堆错误,例如:未解析的外部符号“私有(private):静态类”当在DLL中包含来自核心的一些header时,该类通过__declspec(dllexport)导出,但任何具有静态成员的header都会抛出大量关于静态成员的错误。这是一个相当大的项目,我不能跑来跑去删除我看到的每个静态类成员,有没有这种东西?正在导入的类的基本示例:class__declspec(dllexport)MyClass{public:staticboolm_someVar;}为了清楚起见,我只想说明m_someVar是在类实现
我正在使用导出类class__declspec(dllexport)myclass{private:template__declspec(dllexport)classstd::map;std::mapm_map;//something};当我这样做时,我收到警告C4251说m_map:class'std::map'needstohavedll-interfacetobeusedbyclientsofclassmyclass.关于如何解决这个问题的任何想法?阿图尔 最佳答案 您不应该在使用您的DLL的代码将使用的头文件中使用__de
我一直在努力弄清楚如何将字符串数组从C++DLL返回到C#应用程序,但我对如何执行此操作或在非常基础的级别上查找文章感到困惑。假设我有下面的代码。如何修复粗体线:extern"C"{__declspec(dllexport)intGetANumber();//unsureonthisline:**__declspec(dllexport)::vectorListDevices();**}extern::vectorGetStrings(){vectorseqs;returnseqs;}externintGetANumber(){return27;}谢谢马特
最近我开始使用c++。我听说过exportedfunctions但不确定它是什么意思。所以我的问题是:什么是导出函数?普通函数和导出函数有什么区别吗?如果是,那是什么?它与dll有什么关系? 最佳答案 whatisexportedfunction?当您使用模块(代码片段)进行编程时,您需要在某个模块中调用在其他模块中定义的函数。导出是相对于那个过程。在C/C++中,如果你想声明一个函数来使用它而不在源文件中定义它,你应该使用关键字“extern”。在定义该函数的文件中,您无需做任何特别的事情,默认情况下,全局范围内的内容会自动导出。
我有一些关于Windowsdll的快速问题。基本上我使用ifdefs来处理dllexport和dllimport,我的问题实际上是关于dllexports和dllimports以及extern关键字的放置。我将dllimports/dllexports放在头文件中,但我是否必须将dllexport和dllimports放在实际定义中?对于typedef呢?我是否将dllimport/dllexport放在前面?如dllexporttypedefmapst_map另外关于extern关键字,我看到它被这样使用:extern"C"{dllexportvoidfunc1();}我也看到它被这