我有两个项目:
Project1:基于ATL COM的项目,其输出是.lib文件(静态库)
Project2:基于MFC的GUI应用程序,它链接到静态库,以便可以使用其中的函数。\
如果需要,相应文件的.h文件包含在project1中。
现在从Project2到Project1中的函数的调用正好发生,直到我必须使用以CString作为参数的函数。
每当有一个CString作为参数的调用(在Project1的代码中实现)时,会弹出一个链接错误,指出它无法链接到该函数。
当谷歌搜索时,我发现在ATL和MFC框架中CString的实现是不同的。因此,显而易见的解决办法是传递从Project2为ATL实现的CString,因为Project1是基于ATL的。
所以,当我调用函数时,我从Project2传递CAtlString。但是它给了我相同的链接错误,并且在错误中它传递了CString的MFC版本,尽管我传递了一个CAtlString。
请有人给我解决方案。
该项目的更多具体细节,我在下面提供:
ATL项目是一个基于COM的ATL项目,它有许多有用的类和功能。它的输出已设置为.lib文件。如果任何解决方案链接到该.lib文件,它可以访问其中公开的所有方法。
MFC项目是SD(单文档)项目。更具体地说,如果它对您有所影响,MFC应用程序用于CPPUNIT(用于单元测试)。
IDE - Microsoft Visual Studio 2005 版本8.0.50727.762 我不知道ATL和MFC的版本(实际上我不知道如何检查它。如果你也可以在这里帮忙)
链接错误
错误LNK2019:未解析的外部符号“public:__ thiscall NamespaceInProject1 :: CClassInProject1 :: CClassInProject1(class ATL :: CStringT&gt;&gt;)”(?? 0CClassInProject1 @ NamespaceInProject1 @@ QAE @ V?$ CStringT @ DV?$ StrTraitMFC_DLL @ DV?$ ChTraitsCRT @D @ ATL @@@@@ ATL @@@ Z)在函数“public:void __thiscall CClassInCPPUNITTester :: TesterFunction_PTC01(void)”中引用(?TesterFunction_PTC01 @ CTestsXPathParser @@ QAEXXZ)ClassInCPPUNITTester.obj < / p>
NamespaceInProject1
- 在Project1中声明类的命名空间
CClassInProject1
- Project1中我正在测试其功能的类
CClassInCPPUNITTester
- Project2中的类,我从中调用类CClassInProject1
的函数
TesterFunction_PTC01(void)
- 调用Project2函数中的函数。
我能够完全调用所有不采用CString作为参数的方法。我测试了它们,它们工作得很好。只有当我将CString作为参数时才会出现问题。
请帮忙
我已经尝试了之前在Stackoverflow中提供的许多解决方案。他们都没有帮助。
注意:我在调用时通过值传递CString,而不是通过引用传递。它是一种价值的呼唤。