如何使用Turbo C从C程序创建DLL

时间:2010-07-27 04:03:35

标签: .net c assemblies turbo-c

我在 Turbo C 中编写了一个小程序,我想获取或创建一个这个程序的DLL,以便在我的C#应用​​程序中使用它。

那么如何使用Turbo C创建C程序的DLL? 我想在DLL引用中使用它与C#或VB程序。

如果找到this link,但我无法理解。

2 个答案:

答案 0 :(得分:3)

Turbo C(1989年最后一个版本)是一个基于DOS的程序。它无法创建Win32 DLL。

由于您已经在使用Visual Studio for C#,我强烈建议您使用Visual C ++作为您的DLL。 Visual C ++是自解释的(提示:Win32 DLL是您想要的项目类型)。

答案 1 :(得分:3)

不要使用Turbo C并使用Visual C ++进行编译,因为我们必须使用Win32调用约定。假设 math.h 是你的库。

#include <math.h>

extern "C"
{
    __declspec(dllexport) double __stdcall MyPow(double, double);
}

extern double __stdcall MyPow(double x, double y)
{
    return pow(x, y);
}

然后使用DllImport在您的C#应用​​程序中导入它。

class Program
{
    [DllImport("MyLibrary.dll")]
    extern static double MyPow(double x, double y);

    static void Main(string[] args)
    {
        Console.WriteLine(MyPow(2.0, 5.0));

        Console.ReadKey();
    }
}

这使您的代码完全不受管理。更好的方法是创建托管C ++包装器。为此,请创建一个新的Visual C ++动态库项目,在项目属性&gt;下启用Common Language RunTime Support (OldSyntax)。配置属性&gt; C / C ++&gt;一般并在项目属性&gt;中停用C++ Exceptions配置属性&gt; C / C ++&gt;代码生成。构建发布目标。

extern "C"
{
    #include <math.h>
}

namespace Wrapper
{
    public __gc class MyClass
    {
        public:
            static double MyPow(double x, double y)
            {
                return pow(x, y);
            }
    };
};

然后创建一个新的Visual C#项目,引用我们刚刚制作的.DLL文件,并在项目属性&gt;中构建,如果您在原始库中使用指针并需要在C#应用程序中修改它们,请检查Allow unsafe code

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Wrapper.MyClass.MyPow(2.0, 5.0));

        Console.ReadKey();
    }
}