为什么我得到链接器错误



请注意,我正在使用Windows窗体应用程序与。net

下面是我的代码:
#pragma once
#include <cstdlib>
#include <Windows.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <stdio.h>
#include <string>
#include <cstring>
#include <iostream>
#include <vcclr.h>
#include <hashlibpp.h>
namespace Launcher {
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace System::Diagnostics;
    using namespace MySql::Data::MySqlClient;
    using namespace std;
    using namespace System::Runtime::InteropServices;


    /// <summary>
    /// Summary for Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();

            //
            //TODO: Add the constructor code here
            //
        }
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    //Component properties (not important)
        }
#pragma endregion
void convert(String^ total1, char    *ch){ //Converts string to const char*
    // Pin memory so GC can't move it while native function is called
   pin_ptr<const wchar_t> c1 = PtrToStringChars(total1);
   printf_s("%Sn", c1);
   // Conversion to char* :
   // Can just convert wchar_t* to char* using one of the 
   // conversion functions such as: 
   // WideCharToMultiByte()
   // wcstombs_s()
   // ... etc
   size_t convertedChars = 0;
   size_t  sizeInBytes = ((total1->Length + 1) * 2);
   errno_t err = 0;
   ch = (char *)malloc(sizeInBytes);
   err = wcstombs_s(&convertedChars, 
                    ch, sizeInBytes,
                    c1, sizeInBytes);
   if (err != 0)
      printf_s("wcstombs_s  failed!n");
    printf_s("%sn", ch);
}
void MarshalString ( String ^ s, string& os ) { //Another converter 
   using namespace Runtime::InteropServices;
   const char* chars = 
      (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}
void MarshalString ( String ^ s, wstring& os ) { //Another converter
   using namespace Runtime::InteropServices;
   const wchar_t* chars = 
      (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
             }
             //I removed some other functions from here because they are blank
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                    //MySQL variables
                 try{
                     conDataBase->Open();
                     myReader=cmdDataBase->ExecuteReader();
                     while(myReader->Read()){
                     String^ atmp_user = textBox1->Text;
                     String^ user = (myReader->GetString(1));//Gets Usernames from database
                     String^ atmp_pass = textBox2->Text;
                     String^ pass = (myReader->GetString(2));//Gets Passwords from database
                     atmp_pass->ToLower();//Lower Case's variable
                     atmp_user->ToLower();
                     String^ total1 = gcnew String(atmp_user+atmp_pass);//Combines 2 strings
                     string totala;//std::string
                     MarshalString(total1, totala);//Copies data from (total1) to (totala)
                     hashwrapper *myWrapper = new sha1wrapper();//SHA1 hashing begins
                     string hash1 = myWrapper->getHashFromString(totala);//creates new variable(hash1) and copies data from (totala)
                     String^ finalpass;//Creates new System::String
                     MarshalString(finalpass, hash1);//Copies data from (hash1) to (finalpass)
 delete myWrapper;//Ends SHA1 hashing
                                //Login Script
                     if(atmp_user == user && finalpass == pass){
                         textBox1->Text = ("It worked!");
                     }
                     }
                 } catch(Exception^ex) {
                     MessageBox::Show(ex->Message);
                 }
         }
    //Other blank functions created
};
}

错误如下:

Error   4   error LNK2028: unresolved token (0A0000D5) "public: __clrcall md5wrapper::md5wrapper(void)" (??0md5wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z)  C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   3   error LNK2028: unresolved token (0A00009D) "public: __clrcall sha384wrapper::sha384wrapper(void)" (??0sha384wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z) C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   2   error LNK2028: unresolved token (0A000094) "public: __clrcall sha512wrapper::sha512wrapper(void)" (??0sha512wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z) C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   1   error LNK2028: unresolved token (0A00005B) "public: __clrcall sha256wrapper::sha256wrapper(void)" (??0sha256wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z) C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   5   error LNK2019: unresolved external symbol "public: __clrcall sha512wrapper::sha512wrapper(void)" (??0sha512wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z)  C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   6   error LNK2019: unresolved external symbol "public: __clrcall sha384wrapper::sha384wrapper(void)" (??0sha384wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z)  C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   7   error LNK2019: unresolved external symbol "public: __clrcall sha256wrapper::sha256wrapper(void)" (??0sha256wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z)  C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   8   error LNK2019: unresolved external symbol "public: __clrcall md5wrapper::md5wrapper(void)" (??0md5wrapper@@$$FQAM@XZ) referenced in function "public: class hashwrapper * __clrcall wrapperfactory::create(enum HL_Wrappertype)" (?create@wrapperfactory@@$$FQAMPAVhashwrapper@@W4HL_Wrappertype@@@Z)   C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherLauncherhl_wrapperfactory.obj
Error   9   error LNK1120: 8 unresolved externals   C:UsersJeremyDocumentsVisual Studio 2010ProjectsLauncherDebugLauncher.exe   1

我不明白这些,所以我希望你们可以。顺便说一句,我在这个项目中使用hashlib++库进行SHA1哈希。我想这就是为什么有这么多关于它的参考文献。

您需要链接到库本身。在visual studio中,转到项目首选项,链接器选项,并选择您正在使用的实际库。在这里,你可以找到一个例子的截图如何做到这一点。

这是我遇到的一个奇怪的错误。由于某些原因,vc++将这些方法视为具有__clrcall调用约定,即使它们属于非托管类。我不确定是什么触发的,大多数情况下不会发生。

如果所有这些都失败了,尝试用__thiscall调用约定(这是非托管方法的默认值)显式标记非托管类(包括构造函数和析构函数)的方法:

class md5wrapper
{
public:
    __thiscall md5wrapper();
    __thiscall ~md5wrapper();
    void __thiscall SomeMethod();
    ...

相关内容

  • 没有找到相关文章

最新更新