最近公司專案上有這個需求,那就做,查了很多方面的資料,在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...