3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
BCB創建dll和VS使用dll方法 [VSCallBCBDll] GITHUB: https://github.com/jash-git/VSCallBCBDll 01.BCB_DLL [建立測試用DLL] CPP //--------------------------------------------------------------------------- #include #include #pragma hdrstop //--------------------------------------------------------------------------- // Important note about DLL memory management when your DLL uses the // static version of the RunTime Library: // // If your DLL exports any functions that pass String objects (or structs/ // classes containing nested Strings) as parameter or function results, // you will need to add the library MEMMGR.LIB to both the DLL project and // any other projects that use the DLL. You will also need to use MEMMGR.LIB // if any other projects which use the DLL will be performing new or delete // operations on any non-TObject-derived classes which are exported from the // DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling // EXE's to use the BORLNDMM.DLL as their memory manager. In these cases, // the file BORLNDMM.DLL should be deployed along with your DLL. // // To avoid using BORLNDMM.DLL, pass string information using "char *" or // ShortString parameters. // // If your DLL uses the dynamic version of the RTL, you do not need to // explicitly add MEMMGR.LIB as this will be done implicitly for you //--------------------------------------------------------------------------- #pragma argsused extern "C" __declspec(dllexport) int BCBType_Count(int m, int n); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) { return 1; } int BCBType_Count(int m, int n) { long sum = 0; for(m; m<=n; m++) { sum += m; } return sum; } //--------------------------------------------------------------------------- 產生DEF的BAT impdef.exe BCB_DLL.def BCB_DLL.dll BCB_DLL_Old.def[原始產生] LIBRARY BCB_DLL.DLL EXPORTS _BCBType_Count @1 ; _BCBType_Count ___CPPdebugHook @2 ; ___CPPdebugHook BCB_DLL.def[手動修改] LIBRARY BCB_DLL.DLL EXPORTS BCBType_Count @1 ; _BCBType_Count ___CPPdebugHook @2 ; ___CPPdebugHook 02.CreateVCLIB [建立VC使用的LIB] 建立VC專用LIB的BAT LIB /DEF:BCB_DLL.def pause 03.VCCallBCBDll [VC使用LIB呼叫BCB DLL] CPP // VCCallBCBDll.cpp : 定義主控台應用程式的進入點。 // #include "stdafx.h" #include using namespace std; extern "C" __declspec(dllexport) int BCBType_Count(int m, int n); void Pause() { printf("Press Enter key to continue..."); fgetc(stdin); } int main() { cout << "Hello world!" << endl; cout << "1+2+3....+100=" << BCBType_Count(0, 100) << endl; Pause(); return 0; } 04.CSCallBCBDll [C#呼叫BCB DLL] CS using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices;//USE DLL namespace CSCallBCBDll { class Program { [DllImport("./BCB_DLL.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "_BCBType_Count")] public static extern int BCBType_Count(int m, int n); static void Pause() { Console.Write("Press any key to continue..."); Console.ReadKey(true); } static void Main(string[] args) { Console.WriteLine("1+2+3+...100={0}", BCBType_Count(0, 100)); Pause(); } } } 05.CBCallBCBDll [純C++ 利用WINDOWS API『LoadLibrary』直接使用CB DLL函數] #include #include using namespace std; //--- //不使用LIB動態載入DLL函數 //http://www.infernodevelopment.com/simple-c-dll-loading-message-box #include typedef int (*FuncPtr)(int m,int n); //---不使用LIB動態載入DLL函數 void Pause() { printf("Press Enter key to continue..."); fgetc(stdin); } int main() { FuncPtr myDllFunc; BOOL linkSuccessFlag = FALSE, fFreeResult; HINSTANCE hinstLib = LoadLibrary("BCB_DLL.dll"); if (hinstLib != NULL) { myDllFunc = (FuncPtr) GetProcAddress(hinstLib, "_BCBType_Count"); if (myDllFunc != NULL) { cout << "1+2+3+...+100=" << myDllFunc(1,100) <

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦