error LNK2005:XXXX already defined in XXX.lib

本文解决了一个常见的编译问题,即由于不同的运行时库设置导致的多重定义错误。详细介绍了各种运行时库选项(如/MD、/MDd、/ML等)的作用及如何正确配置以避免链接时出现冲突。

 Linking...
base64.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification
Searching libraries
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/msvcrtd.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/libcmtd.lib:
Searching ../Output/Debug/USBInfo.lib:
Searching ../../Library Source Code/xerces/lib/xerces-c_2D.lib:
Searching ../../Library Source Code/lib/u3dapi10.lib:
Searching ../../Library Source Code/lib/libeay32.lib:
Searching ../../Library Source Code/lib/libcurl.lib:
Searching ../../Librar~1/lib/Zlib.lib:
Searching F:/New MicrosoftSDK/Lib/ws2_32.lib:
Searching ../Output/Debug/FPHelper.lib:
Searching ../../Debug/CryptoInterface/CryptoInterface.lib:
Searching ../../Debug/FBCommonDLL/FBCommonDll.lib:
Searching F:/New MicrosoftSDK/Lib/Netapi32.lib:
Searching F:/New MicrosoftSDK/Lib/psapi.lib:
Searching F:/New MicrosoftSDK/Lib/Mpr.lib:
Searching F:/New MicrosoftSDK/Lib/Wininet.lib:
Searching F:/New MicrosoftSDK/Lib/version.lib:
Searching F:/New MicrosoftSDK/Lib/Pdh.lib:
Searching ../Output/Debug/DeviceInfo.lib:
Searching F:/New MicrosoftSDK/Lib/setupapi.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/OLDNAMES.lib:
Searching F:/New MicrosoftSDK/Lib/uuid.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/msvcprtd.lib:
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::operator=(char const *)" (??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z) already defined in USBInfo.lib(USBInfo.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::operator=(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::_Container_base::~_Container_base(void)" (??1_Container_base@std@@QAE@XZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "bool __cdecl std::operator<<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: void __thiscall std::_Container_base::_Orphan_all(void)const " (?_Orphan_all@_Container_base@std@@QBEXXZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::_Container_base::_Container_base(void)" (??0_Container_base@std@@QAE@XZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: unsigned int __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::length(void)const " (?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::substr(unsigned int,unsigned int)const " (?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: unsigned int __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::size(void)const " (?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::assign(char const *)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::assign(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::allocator<char>::allocator<char>(void)" (??0?$allocator@D@std@@QAE@XZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: char * __thiscall std::allocator<char>::allocate(unsigned int)" (?allocate@?$allocator@D@std@@QAEPADI@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: void __thiscall std::allocator<char>::deallocate(char *,unsigned int)" (?deallocate@?$allocator@D@std@@QAEXPADI@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: __thiscall std::allocator<char>::allocator<char>(class std::allocator<char> const &)" (??0?$allocator@D@std@@QAE@ABV01@@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: unsigned int __thiscall std::allocator<char>::max_size(void)const " (?max_size@?$allocator@D@std@@QBEIXZ) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::assign(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned int,unsigned int)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::erase(unsigned int,unsigned int)" (?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: int __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::compare(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z) already defined in USBInfo.lib(USBInfoInterface.obj)
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/comsupp.lib:
Searching F:/New MicrosoftSDK/Lib/user32.lib:
Searching F:/New MicrosoftSDK/Lib/ole32.lib:
Searching F:/New MicrosoftSDK/Lib/oleaut32.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/atlsd.lib:
Searching F:/New MicrosoftSDK/Lib/kernel32.lib:
Searching F:/New MicrosoftSDK/Lib/advapi32.lib:
Searching F:/New MicrosoftSDK/Lib/shell32.lib:
Searching F:/New MicrosoftSDK/Lib/shlwapi.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/mfc80d.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/mfcs80d.lib:
Searching F:/New MicrosoftSDK/Lib/gdi32.lib:
Searching F:/New MicrosoftSDK/Lib/msimg32.lib:
Searching F:/New MicrosoftSDK/Lib/comdlg32.lib:
Searching F:/New MicrosoftSDK/Lib/winspool.lib:
Searching F:/New MicrosoftSDK/Lib/comctl32.lib:
Searching F:/New MicrosoftSDK/Lib/oledlg.lib:
Searching F:/New MicrosoftSDK/Lib/urlmon.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/msvcrt.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/libcpmtd.lib:
Searching F:/New MicrosoftSDK/Lib/mswsock.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/msvcrtd.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/libcmtd.lib:
Searching ../Output/Debug/USBInfo.lib:
Searching ../../Library Source Code/xerces/lib/xerces-c_2D.lib:
Searching ../../Library Source Code/lib/u3dapi10.lib:
Searching ../../Library Source Code/lib/libeay32.lib:
Searching ../../Library Source Code/lib/libcurl.lib:
Searching ../../Librar~1/lib/Zlib.lib:
Searching F:/New MicrosoftSDK/Lib/ws2_32.lib:
Searching ../Output/Debug/FPHelper.lib:
Searching ../../Debug/CryptoInterface/CryptoInterface.lib:
Searching ../../Debug/FBCommonDLL/FBCommonDll.lib:
Searching F:/New MicrosoftSDK/Lib/Netapi32.lib:
Searching F:/New MicrosoftSDK/Lib/psapi.lib:
Searching F:/New MicrosoftSDK/Lib/Mpr.lib:
Searching F:/New MicrosoftSDK/Lib/Wininet.lib:
Searching F:/New MicrosoftSDK/Lib/version.lib:
Searching F:/New MicrosoftSDK/Lib/Pdh.lib:
Searching ../Output/Debug/DeviceInfo.lib:
Searching F:/New MicrosoftSDK/Lib/setupapi.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/OLDNAMES.lib:
Searching F:/New MicrosoftSDK/Lib/uuid.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/msvcprtd.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/lib/comsupp.lib:
Searching F:/New MicrosoftSDK/Lib/user32.lib:
Searching F:/New MicrosoftSDK/Lib/ole32.lib:
Searching F:/New MicrosoftSDK/Lib/oleaut32.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/atlsd.lib:
Searching F:/New MicrosoftSDK/Lib/kernel32.lib:
Searching F:/New MicrosoftSDK/Lib/advapi32.lib:
Searching F:/New MicrosoftSDK/Lib/shell32.lib:
Searching F:/New MicrosoftSDK/Lib/shlwapi.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/mfc80d.lib:
Searching D:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/mfcs80d.lib:
Searching F:/New MicrosoftSDK/Lib/gdi32.lib:
Searching F:/New MicrosoftSDK/Lib/msimg32.lib:
Searching F:/New MicrosoftSDK/Lib/comdlg32.lib:
Searching F:/New MicrosoftSDK/Lib/winspool.lib:
Searching F:/New MicrosoftSDK/Lib/comctl32.lib:
Searching F:/New MicrosoftSDK/Lib/oledlg.lib:
Searching F:/New MicrosoftSDK/Lib/urlmon.lib:
Finished searching libraries
msvcrtd.lib(cinitexe.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
./../Output/Debug/KPActivator.exe : fatal error LNK1169: one or more multiply defined symbols found
Creating browse information file...
Microsoft Browse Information Maintenance Utility Version 8.00.50727
Copyright (C) Microsoft Corporation. All rights reserved.
Build log was saved at "file://e:/PORTAL_build 51/KeyPoint/IntermediateFiles/Debug/KPActivator/BuildLog.htm"
KPActivator - 24 error(s), 34 warning(s)

 

==============================================================

The problem was because of different Run-Time library settings.

当前工程和Lib工程使用的Run-Time library 不一致。

 

这些选项选择单线程或多线程运行时例程,指示多线程模块是否为 DLL,并选择运行时库的发布版本或调试版本。


选项说明
/MD定义 _MT_DLL 以便同时从标准 .h 文件中选择运行时例程的多线程特定版本和 DLL 特定版本。此选项还使编译器将库名 MSVCRT.lib 放入 .obj 文件中。

用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR71.DLL 中,该库必须在运行时对于与 MSVCRT.lib 链接的应用程序可用。

当 在定义了 _STATIC_CPPLIB (/D_STATIC_CPPLIB) 的情况下使用 /MD 时,它将导致应用程序通过静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 进行链接,同时仍通过 msvcrt.lib 动态链接到主 CRT。

/MDd定义 _DEBUG_MT_DLL,以便从标准 .h 文件中选择运行时例程的调试多线程特定版本和 DLL 特定版本。它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。
/ML使编译器将库名 LIBC.lib 放入 .obj 文件中,以便链接器使用 LIBC.lib 解析外部符号。这是编译器的默认操作。LIBC.lib 不提供多线程支持。
/MLd定义 _DEBUG 并使编译器将库名 LIBCD.lib 放入 .obj 文件中,以便链接器使用 LIBCD.lib 解析外部符号。LIBCD.lib 不提供多线程支持。
/MT定义 _MT, 以便从标准头 (.h) 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。创建多线程程序需要 /MT 或 /MD(或它们的调试等效选项 /MTd 或 /MDd)。
/MTd定义 _DEBUG_MT。定义 _MT 会导致从标准 .h 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使用 LIBCMTD.lib 解析外部符号。创建多线程程序需要 /MTd 或 /MDd(或它们的非调试等效选项 /MT 或 MD)。
/LD创建 DLL。

将 /DLL 选项传递到链接器。链接器查找 DllMain 函数,但并不需要该函数。如果没有编写 DllMain 函数,链接器将插入返回 TRUE 的 DllMain 函数。

链接 DLL 启动代码。

如果命令行上未指定导出 (.exp) 文件,则创建导入库 (.lib);将导入库链接到调用您的 DLL 的应用程序。

/Fe 解释为命名 DLL 而不是 .exe 文件;默认程序名成为基名称.dll 而不是基名称.exe。

如果还未显式指定 /M 选项之一,则将默认运行时库支持更改为 /MT。

/LDd创建调试 DLL。定义 _DEBUG

警告    不要混合使用运行时库的静态版本和动态版本。在一个进程中有多个运行时库副本会导致问题,因为副本中的静态数据不与其他副本共享。链接器禁止在 .exe 文件内部既使用静态版本又使用动态版本链接,但您仍可以使用运行时库的两个(或更多)副本。例如,当与用动态 (DLL) 版本的运行时库链接的 .exe 文件一起使用时,用静态(非 DLL)版本的运行时库链接的动态链接库可能导致问题。(还应该避免在一个进程中混合使用这些库的调试版本和非调试版本)。

有关使用运行时库的调试版本的更多信息,请参见运行时库参考。

知识库文章 Q140584 也讨论如何选择适当的 C 运行时库。

有关 DLL 的进一步讨论,请参见 DLL

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性
  2. 单击“C/C++”文件夹。
  3. 单击“代码生成”属性页。
  4. 修改“运行时库”属性。

关于Visual C++ 编译器选项的说明:

 

<think> 我们参考了用户提供的引用信息,尤其是引用[1]、[2]、[3]、[4]和[5],这些引用都涉及在PowerBuilder中添加pbsoapclient*.pbd文件以支持Web Service调用。用户特别询问如何将pbsoapclient90.pbd加入到PowerBuilder中。 根据引用信息: - 引用[1]和[2]指出,需要将pbsoapclient*.pbd文件添加到项目的库列表中(Library List)。 - 引用[3]和[4]分别提到了在PB6.5和PB9中添加pbsoapclient*.pbd的方法,包括使用Web Service Proxy向导和直接添加PBD文件到库路径。 - 引用[5]展示了在PB9中通过Web Service Proxy Wizard调用Web Service的示例,其中也涉及到PBD文件的添加。 具体步骤归纳如下: 1. **打开PowerBuilder应用**:启动PowerBuilder并打开需要添加pbsoapclient90.pbd的应用程序(Application)。 2. **打开库列表**:在PowerBuilder的菜单栏中,选择“打开(Open)”或直接进入应用程序的属性。 3. **添加PBD文件到库搜索路径**: - 在应用程序对象(Application Object)的属性窗口中,找到“Libraries”或“库搜索路径”(Library Search Path)属性。 - 在该属性中,添加pbsoapclient90.pbd文件的完整路径(例如:`C:\Program Files (x86)\Sybase\Shared\PowerBuilder\pbsoapclient90.pbd`)。如果路径中已有其他PBD文件,用分号分隔。 4. **保存更改**:保存应用程序对象的更改。 5. **重新部署或运行**:重新部署应用程序或直接运行,以确保更改生效。 另外,引用[3]和[4]还提到了两种不同的调用Web Service的方法: - **Proxy方式**(适用于PB9及以上):使用Web Service Proxy Wizard生成代理对象,此方法需要包含pbsoapclient90.pbd。 - **OLE方式**(适用于低版本PB,如PB6.5):通过创建OLEObject来调用MSSOAP.SoapClient,不需要添加pbsoapclient*.pbd,但需要安装SOAP Toolkit。 由于用户明确提到要添加pbsoapclient90.pbd,因此我们推荐使用Proxy方式(如果用户使用的是PB9或更高版本)。 **注意**:pbsoapclient90.pbd文件通常位于PowerBuilder安装目录的Shared文件夹下,如`C:\Program Files (x86)\Sybase\Shared\PowerBuilder\`。如果用户没有找到该文件,可能需要检查PowerBuilder安装是否完整,或者从安装介质中重新提取。 **相关问题**: 1. 如何验证pbsoapclient90.pbd是否已成功加载? 2. 使用Proxy方式调用Web Service的具体步骤是什么? 3. 在低版本PowerBuilder(如PB6.5)中如何调用Web Service? 4. 出现“无法找到pbsoapclient90.pbd”错误应如何解决? </think> 要将 `pbsoapclient90.pbd` 添加到 PowerBuilder (PB) 项目中,请按以下步骤操作: ### 添加步骤 1. **打开应用属性** - 在 PB 中打开您的应用程序(Application) - 右键点击应用对象 → 选择 **Properties** 2. **添加库文件** - 在属性窗口中切换到 **Libraries** 标签页 - 点击 **Browse** 按钮 → 定位到文件: `C:\Program Files (x86)\Sybase\Shared\PowerBuilder\pbsoapclient90.pbd` ![图示:库添加界面](https://example.com/pb-library-add.png) *(路径可能因安装目录略有差异)* 3. **验证加载** - 确保添加后能在库列表中看到 `pbsoapclient90.pbd` - 保存应用属性变更 4. **代码调用(可选)** 若需调用 Web Service,可初始化 `SoapConnection` 对象: ```powerbuilder SoapConnection sc sc = CREATE SoapConnection sc.ConnectToObject("WebServiceName") ``` ### 📌 关键说明 - **版本匹配**:`pbsoapclient90.pbd` 专用于 PB 9.x 版本(引用[3][4]) - **文件位置**:默认路径在 PB 安装目录的 `Shared\PowerBuilder\` 子文件夹 - **错误处理**:若提示类型错误,需检查: 1. PBD 文件路径是否正确 2. PowerBuilder 版本是否匹配 3. 对象声明语法是否准确(引用[1]) > ⚠️ **注意**:低版本 PB(如 6.5)需改用 OLE 方式调用 `MSSOAP.SoapClient`(引用[3]),高版本(PB 9+)推荐使用 Proxy 向导(引用[4][5])。 --- ### 🔍 相关问题 1. 如何验证 `pbsoapclient90.pbd` 是否成功加载到 PB 项目中? 2. PB 9 中使用 Web Service Proxy Wizard 的具体操作步骤是什么? 3. 当出现 `SoapConnection` 类型错误时,应如何逐步排查问题? 4. PB 6.5 如何通过 OLE 方式调用 Web Service? 5. 不同 PB 版本对应的 `pbsoapclient*.pbd` 命名规则是什么?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值