.net 需要C#/C++;DLL建议

.net 需要C#/C++;DLL建议,.net,c,dll,.net,C,Dll,我已经成功地让Dreamweaver接受我的DLL并调用它的方法。动态链接库是用C++编写的,带有C插入函数(因此函数名不会被损坏)。 我想对C++指针和数据类型感到满意,但是我对C语言有更高的熟练度,所以对于我们的时间线,我认为研究一个直的C解决方案的替代品是值得的。 从理论上讲,我能在C中构建一个DLL吗?从“外部”看,它与C DLL一样 作为替代方案 我能用工作中的C DLL“包装”C#DLL吗? 我关注的主要部分是函数的数据类型,因为当dreamweaver调用它们时,它期望void和c

我已经成功地让Dreamweaver接受我的DLL并调用它的方法。动态链接库是用C++编写的,带有C插入函数(因此函数名不会被损坏)。 <>我想对C++指针和数据类型感到满意,但是我对C语言有更高的熟练度,所以对于我们的时间线,我认为研究一个直的C解决方案的替代品是值得的。 从理论上讲,我能在C中构建一个DLL吗?从“外部”看,它与C DLL一样

作为替代方案

我能用工作中的C DLL“包装”C#DLL吗?

我关注的主要部分是函数的数据类型,因为当dreamweaver调用它们时,它期望void和char指针作为来回传递数据的格式


谢谢。

与普遍的看法相反,这是可能的。

请参阅。

您可以创建一个。我现在使用它从一些旧的C/C++代码中调用.NET函数。

是的,C++/CLI编译器使这项工作变得简单。它会自动生成一个“thunk”,确保在非托管程序调用导出函数时加载CLR。最好用一个例子来说明

从C代码开始,从类库项目模板创建一个新项目。您必须编写一个静态方法,这是必需的,因为C代码对类一无所知。下面是一个简单的例子:

using System;

namespace ClassLibrary1 {
    public static class Mumble {
        public static int method(int arg) { return arg; }
    }
}
右键单击解决方案资源管理器窗口中的解决方案名称,添加+新建项目。选择VisualC++、CLR、类库。在新项目、属性、公共属性、框架和引用上单击鼠标右键,然后单击“添加新引用”。“项目”选项卡,选择您的C#项目

打开.cpp文件并编写如下代码:

#include "stdafx.h"

using namespace ClassLibrary1;

extern "C" __declspec(dllexport)
int method(int arg) {
    return Mumble::method(arg);
}
建造。这个DLL现在可以被非托管代码使用,它可以调用“method”函数。此DLL和您的C#DLL都需要复制到非托管程序的目录中

请注意,调用此方法会有开销。C++/CLI编译器生成的thunk需要做大量的工作来确保CLR被加载和初始化。调试将取消运行(使用Debugger.Break()),未捕获的托管异常将导致程序崩溃,诊断非常糟糕