C++ 调用C# 编写的dl

获取中...

C# 建立类库,留意使用的Netframework版本
代码大概这样

namespace CSharp
{
    public class program
    {
        private void Run()           
        {
            //你的代码
        }
    }
}

然后C++ 需要新建一个DLL项目,用来做包装层,名字就叫Wrapper好了
dll新建过程没什么特殊的
但主要有以下几点

ljpcdfzl.png

注意版本是刚刚C#的Netframework版本

还要把 C++ - 优化 - 符合模式 - 否

接下来看这个dll的代码,我直接拷贝项目里的代码,注意写的注释是重点

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <string>
using namespace std;

//引入C#的dll
#using "C:\\Users\\admin\\source\\repos\\WindowsFormsApp1\\ClassLibrary1\\bin\\Debug\\ClassLibrary1.dll"
//使用C#的空间
using namespace CSharp;

extern "C" __declspec(dllexport) int __stdcall  DecodeXml() {
    program ^p = gcnew program();
    return p->DecodeXml();

}


extern "C" __declspec(dllexport) int __stdcall  EecodeXml() {
    program ^p = gcnew program();
    return p->EecodeXml();

}

//这句一定要加载dllmain上面
#pragma unmanaged
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{

    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

完全按照这样做应该编译没问题,我用的是C# vs2019,C++ vs2017,如果其他版本出现问题请自己解决吧

编译C++ dll后,把C#dll 跟Wrapper dll 放一起,然后一起放到调用的地方,一定要放一起哦,不然会运行出问题

就酱

C++
打赏
评论区
头像
    头像
    ring0
      

    就是你小子说精通逆向的是么。。站住不要走,汇编asm走一波看看。

      头像
      夏小沫
        
      @ring0

      我不是我没有

    头像
    JKK
      

    这是所见过最酷炫的blog, very nice~~
    不过,话说图片不走图床,直接放在服务器下,不怕被刷吗?

      头像
      夏小沫
        
      @JKK

      刷就刷,刷了再放图床