C#动态调用C++DLL

1.DLL中函数实现

extern "C" __declspec(dllexport) int MultiplyByTen(int numberToMultiply);

extrn "C" _declspec(dllexport) int GenReg(char* id1, char *id2,char* string);

#include "DynamicDLLToCall.h"

int MultiplyByTen(int numberToMultiply)
{
        int returnValue = numberToMultiply * 10;
        return returnValue;
}
 

int GenReg(char* id1, char *id2,char* string)

{

   return 0;

}

2.导入DLL声明     

    #region P/Invoke helpers

   [DllImport("kernel32.dll")]
    public static extern IntPtr LoadLibrary(string dllToLoad);

    [DllImport("kernel32.dll")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);

   [DllImport("kernel32.dll")]
   public static extern bool FreeLibrary(IntPtr hModule);

  #endregion

  private delegate int MultiplyByTen(int numberToMultiply);

  
  private delegate int GenRegProc(byte[] id1, byte[] id2, byte[] string);

3.调用DLL

    IntPtr pDll = LoadLibrary("YourDll.DLL");

   IntPtr pAddressOfFunctionToCall = GetProcAddress(pDll, "MultiplyByTen");

   MultiplyByTen multiplyByTen = (MultiplyByTen)Marshal.GetDelegateForFunctionPointer(
                                                                                        pAddressOfFunctionToCall,
                                                                                        typeof(MultiplyByTen));

   IntPtr pAddressOfFunctionToCall = GetProcAddress(pDll, "GenReg");

  GenRegProc GenRegMethod = (GenRegProc)Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall,typeof(GenRegProc));

   int regCode = GenRegMethod(Encoding.ASCII.GetBytes(device), Encoding.ASCII.GetBytes(productCode), Encoding.ASCII.GetBytes(CodeGenerator.GeneratorKey)).ToString();


    int theResult = multiplyByTen(10);    bool result = FreeLibrary(pDll);

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值