【问题标题】:Linker error in Visual C++ Windows Forms projectVisual C++ Windows 窗体项目中的链接器错误
【发布时间】:2011-03-12 06:52:11
【问题描述】:

我正在使用 SQLAPI++ 从我的 Visual C++ 应用程序连接到 Oracle。 只有在 Win32 控制台应用程序模式下,我才能轻松地从 VC++ 连接到数据库。

但是当我尝试在 Windows 窗体项目中执行相同操作时,我收到以下链接器错误。 有人可以帮我解决这个问题,因为我需要将表单中输入的值插入数据库。

我的代码是:

#include <SQLAPI.h> 
#include "stdafx.h"
#include "Form1.h"
#include <stdio.h>
using namespace sqlapi;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    SAConnection con; 
    SACommand cmd;    
    try
    {
        con.Connect("", "scott", "tiger", SA_Oracle_Client);
        cmd.setConnection(&con);
        cmd.setCommandText(
            "Create table test_tbl(fid integer, fvarchar20 varchar(20), fblob blob)");
        cmd.Execute();
        cmd.setCommandText(
            "Insert into test_tbl(fid, fvarchar20) values (1, 'Some string (1)')");
        cmd.Execute();
        con.Commit();
    }
    catch(SAException &x)
    {
        try
        {
            con.Rollback();
        }
        catch(SAException &)
        {
        }
    }
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);
    Application::Run(gcnew Form1());
    return 0;
}

我得到的错误是

sqlapi.obj : error LNK2028: unresolved token (0A000010) "public: void __clrcall SAConnection::Rollback(void)" (?Rollback@SAConnection@@$$FQAMXXZ) referenced in function __catch$?main@@$$HYMHP$01AP$AAVString@System@@@Z$0
sqlapi.obj : error LNK2028: unresolved token (0A000016) "public: void __clrcall SAConnection::Commit(void)" (?Commit@SAConnection@@$$FQAMXXZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)

sqlapi.obj : error LNK2028: unresolved token (0A000018) "public: void __clrcall SACommand::setCommandText(class SAString const &,enum SACommandType_t)" (?setCommandText@SACommand@@$$FQAMXABVSAString@@W4SACommandType_t@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
sqlapi.obj : error LNK2028: unresolved token (0A000019) "public: void __clrcall SACommand::setConnection(class SAConnection *)" (?setConnection@SACommand@@$$FQAMXPAVSAConnection@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
sqlapi.obj : error LNK2028: unresolved token (0A00001A) "public: __clrcall SAString::~SAString(void)" (??1SAString@@$$FQAM@XZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
sqlapi.obj : error LNK2028: unresolved token (0A00001B) "public: __clrcall SAString::SAString(char const *)" (??0SAString@@$$FQAM@PBD@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
sqlapi.obj : error LNK2028: unresolved token (0A00001C) "public: void __clrcall SAConnection::Connect(class SAString const &,class SAString const &,class SAString const &,enum SAClient_t,void (__cdecl*)(class SAConnection &,enum SAConnectionHandlerType_t))" (?Connect@SAConnection@@$$FQAMXABVSAString@@00W4SAClient_t@@P6AXAAV1@W4SAConnectionHandlerType_t@@@Z@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
sqlapi.obj : error LNK2028: unresolved token (0A00001D) "public: virtual __clrcall SACommand::~SACommand(void)" (??1SACommand@@$$FUAM@XZ) referenced in function __catch$?main@@$$HYMHP$01AP$AAVString@System@@@Z$0
sqlapi.obj : error LNK2028: unresolved token (0A00001E) "public: __clrcall SACommand::SACommand(void)" (??0SACommand@@$$FQAM@XZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
sqlapi.obj : error LNK2028: unresolved token (0A00001F) "public: virtual __clrcall SAConnection::~SAConnection(void)" (??1SAConnection@@$$FUAM@XZ) referenced in function __catch$?main@@$$HYMHP$01AP$AAVString@System@@@Z$0
sqlapi.obj : error LNK2028: unresolved token (0A000020) "public: __clrcall SAConnection::SAConnection(void)" (??0SAConnection@@$$FQAM@XZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
sqlapi.obj : error LNK2019: unresolved external symbol "public: virtual __clrcall SAConnection::~SAConnection(void)" (??1SAConnection@@$$FUAM@XZ) referenced in function __catch$?main@@$$HYMHP$01AP$AAVString@System@@@Z$0
sqlapi.obj : error LNK2019: unresolved external symbol "public: virtual __clrcall SACommand::~SACommand(void)" (??1SACommand@@$$FUAM@XZ) referenced in function __catch$?main@@$$HYMHP$01AP$AAVString@System@@@Z$0
sqlapi.obj : error LNK2019: unresolved external symbol "public: void __clrcall SAConnection::Rollback(void)" (?Rollback@SAConnection@@$$FQAMXXZ) referenced in function __catch$?main@@$$HYMHP$01AP$AAVString@System@@@Z$0
sqlapi.obj : error LNK2019: unresolved external symbol "public: void __clrcall SAConnection::Commit(void)" (?Commit@SAConnection@@$$FQAMXXZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)

我在 Win32 控制台模式下没有收到任何错误。 我什至还在其他依赖项中添加了库。

【问题讨论】:

  • 您的代码无关紧要 - 这些是一些内部库错误

标签: sql winforms c++-cli linker-errors


【解决方案1】:

我没有经常使用 C++/CLI,但我认为您遇到的问题与此问题 error linking to oci libraries from vc++ 中回答的问题相同。

我还在此线程http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/44fc45c4-10da-4670-bc5d-2f505ee32fd1 的底部发现了一条评论,暗示 C++ windows 窗体项目必须处于 /clr:pure 模式。我猜这可能与控制台应用程序不同。我还想知道您是否正在使用更高版本的 Visual Studio,如果您可以摆脱对 Window Forms 使用 /clr 模式?

【讨论】:

  • 感谢您的建议,您提供的链接很有帮助。我使用了相同的编译指示,但在 clr 正常模式下。 b4 我在 clr 纯模式下做同样的事情,所以我得到了错误。使用 clr 模式而不是 clr/pure 模式会以任何方式影响我的表单项目,而不是使我能够使用非托管函数吗?提前致谢。
  • @naturmaN:我已经在你的另一个问题上解释过了。
  • @naturmaN 我不知道从个人经验,但MSDN 是我所知道的差异的最佳参考。我在搜索Expert C++/CLI 时也发现了这本书。周围的 C++ Windows 窗体应用程序似乎没有很多可靠的资源......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
相关资源
最近更新 更多