C++和Delphi混合編程主要涉及到在Delphi中調用C++編寫的動態鏈接庫(DLL)或者使用C++編寫COM組件供Delphi調用。下面分別介紹這兩種方法:
步驟1:創建C++ DLL 首先,你需要用C++編寫一個動態鏈接庫。這里是一個簡單的C++ DLL示例:
// MyDll.h
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
extern "C" MYDLL_API int __stdcall Add(int a, int b);
// MyDll.cpp
#include "MyDll.h"
extern "C" MYDLL_API int __stdcall Add(int a, int b) {
return a + b;
}
使用Visual Studio或其他C++編譯器編譯這個項目,生成DLL文件。
步驟2:在Delphi中調用DLL
在Delphi中,你可以使用System.DynamicLinkLibrary
類加載DLL并調用其中的函數。例如:
uses
System.SysUtils, System.DynamicLinkLibrary;
function Add(a, b: Integer): Integer;
var
DllHandle: HMODULE;
DllFunc: function(a, b: Integer): Integer; stdcall;
begin
DllHandle := LoadLibrary('MyDll.dll');
if DllHandle = 0 then
RaiseLastOSError;
try
@DllFunc := GetProcAddress(DllHandle, 'Add');
Result := DllFunc(a, b);
finally
FreeLibrary(DllHandle);
end;
end;
步驟1:創建C++ COM組件 首先,你需要用C++編寫一個COM組件。這里是一個簡單的C++ COM組件示例:
// MyComLib.h
#include <ocidl.h>
[
object,
uuid(YOUR_UUID),
helpstring("My Com Component")
]
interface IMyComLib : IDispatch {
HRESULT __stdcall Add(long a, long b, long* result);
};
// MyComLib.cpp
#include "MyComLib.h"
[uuid(YOUR_UUID)]
STDMETHODIMP MyComLib::Add(long a, long b, long* result) {
*result = a + b;
return S_OK;
}
使用Visual Studio或其他C++編譯器編譯這個項目,生成DLL文件。然后使用regsvr32
命令注冊生成的DLL文件。
步驟2:在Delphi中調用COM組件
在Delphi中,你可以使用COM.Object
類創建一個COM對象并調用其中的方法。例如:
uses
ComObj, SysUtils;
var
MyComLib: IMyComLib;
begin
try
MyComLib := CreateOleObject('MyComLib.IMyComLib');
MyComLib.Add(1, 2, Result);
except
on E: Exception do
ShowMessage('Error: ' + E.Message);
end;
end;
注意:在使用C++編寫COM組件時,需要確保你的Delphi編譯器支持COM編程。在Delphi的編譯器選項中,需要勾選"Enable COM support"。