C 與C 分別呼叫C 生成的DLL

2021-07-31 03:41:38 字數 2846 閱讀 8732

最近公司專案上有這個需求,那就做,查了很多方面的資料,在c++呼叫dll的時候一切順利.c#呼叫各種問題.下面是我自己的一些看法.

如果你的開發環境是64位.記得設定:專案->屬性->生成->release/debug->平台->x86

dll檔名:checklicence.dll

作用:取pc 的cpuid +某字串+mac位址 轉成md5的值,作為一種檢驗加密的功能使用.

c++呼叫dll部分

#include "stdafx.h"  

#include #include #include #include using namespace std;

//測試呼叫dll的結果

//int main(int argc, char* argv);

int _tmain(int argc, _tchar* argv)

//dllchecklicence自己定義的.不影響

typedef string (*dllchecklicence)();

//getnativemd5:dll中的乙個方法 

dllchecklicence getnativemd5 = (dllchecklicence)::getprocaddress(hinst,"getnativemd5");

string strnativemd5 =getnativemd5();

cout<<"serial value:"<

c#呼叫部分(基本上差不多)

先建立乙個類,方便使用

using system;

using system.collections.generic;

using system.text;

using system.runtime.interopservices;

namespace tcallcdll

}(**段中的這個方法看上去有點不明所以,但是很好理解.其他幾個網上找來的方式都失敗了,沒那麼多件去研究這個,所以~)

呼叫部分:

做了個form,顯示在窗體上

using system.runtime.interopservices;//這個是引用

private void button2_click(object sender, eventargs e)

private void button3_click(object sender, eventargs e)

#define dllchecklicence _declspec(dllexport)

#include "stdafx.h"

#include

#include

#include

#include

#include

#pragma comment(lib, "iphlpapi.lib")

#include

#include

#include

#include "md5.h"

#include "getregvalue.h"

using namespace std;

#ifdef _managed

#pragma managed(push, off)

#endif

#pragma region code

bool getmacbygetadaptersinfo(std::string& macid)

if(getadaptersinfo(padapterinfo, &uloutbuflen) == no_error)

} free(padapterinfo);

return ret; }

string insertformat(string input, int interval, string value) 

dllchecklicence string getnativemd5()

char str[17];

sprintf(str,"%08x%08x",s1,s2);

std::string cpuid = std::string(str);

string macid;

getmacbygetadaptersinfo(macid);

//合併字串

//string strserial =cpuid+"abcdef"+macid;

string strserial =string(str)+"abcdef"+macid;

md5 md5;

md5.update(strserial);

/*prin***5("", md5);

couttransform(strres.begin(), strres.end(), strres.begin(), toupper);

string strmd5=insertformat(strres,2,"-");

return strmd5; }

dllchecklicence string getreglicencevalue()

#pragma endregion code

extern "c" __declspec(dllexport) int getnativemd5csharp(char *in, int len, char *out)

extern "c" __declspec(dllexport) int getregvaluecsharp(char *in, int len, char *out)

#ifdef _managed

#pragma managed(pop)

#endif

C 呼叫C 生成的dll

本文將介紹c 中通過dll來呼叫c 首先建立c 的 類庫 工程cshapedll。然後輸入如下 csharp view plain copy c 通過dll呼叫c by morewindows using system using system.collections.generic using s...

C 生成dll呼叫

用visual c 生成的dll檔案已經和以前的dll檔案有了本質上的區別。用visual c 生成的dll檔案在程式設計中更多的表現為一種類 class 或者類庫 class library 製作乙個元件 1.首先建立乙個新類庫工程檔案 file new project visual c proj...

C 呼叫外部C 生成DLL

生成dll c 檔案部分內容 h檔案 外部呼叫函式宣告 pragma once ifndef kinectdatagenerator h define kinectdatagenerator h initialize kinect extern c declspec dllexport void k...