请注意,我正在使用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();
...