C++/CLI Windows窗体-创建自定义DLL库



今天我想制作自己的动态库。我正在使用VC++2010。尝试应用控制台示例(来自http://msdn.microsoft.com/en-us/library/ms235636%28v=vs.80%29.aspx)但我一直失败。以下是我遵循的步骤:

  • 创建Win32项目并从向导中选择"空项目"、"DLL"
  • 使用创建标题

    // FILE: bday.h
    #ifndef BDAY_H_
    #define BDAY_H_
    #ifdef BUILD_DLL
    #define PORT_DLL __declspec(dllexport)
    #else
    #define PORT_DLL __declspec(dllimport)
    #endif
    namespace Tests
    {
        public class BDay
        {
        public:
            static PORT_DLL double Foo(double);
        };
    };
    #endif
    
  • 创建一个.cpp来实现该类
  • 建立这个成功的项目

然后我选择

  • 创建Windows窗体项目,添加对以前创建的.dll的引用
  • 包括上一个项目的bday.h
  • 定义BUILD_DLL常量
  • 添加一个按钮,单击后调用Tests:BDay::Foo

建设这个项目给了我

1>CoreResGen:
1>  Processing resource file "Form1.resX" into "Debuggeneratory2.Form1.resources".
1>generatory2.obj : error LNK2028: unresolved token (0A00000F) "public: static double __cdecl Tests::BDay::Foo(double)" (?Foo@BDay@Tests@@$$FSANN@Z) referenced in function "private: void __clrcall generatory2::Form1::button4_Click(class System::Object ^,class System::EventArgs ^)" (?button4_Click@Form1@generatory2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>generatory2.obj : error LNK2019: unresolved external symbol "public: static double __cdecl Tests::BDay::Foo(double)" (?Foo@BDay@Tests@@$$FSANN@Z) referenced in function "private: void __clrcall generatory2::Form1::button4_Click(class System::Object ^,class System::EventArgs ^)" (?button4_Click@Form1@generatory2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>C:UsersPatrykDocumentsVisual Studio 2010Projectsgeneratory2Debuggeneratory2.exe : fatal error LNK1120: 2 unresolved externals

我一定做错了什么,你能指出错误在哪里吗?

如果您想将其引用为.Net类和方法,则需要这样做。
dll导出/导入用于非托管代码。(在您的情况下为本机c++)。

在c++项目中,您必须使用匹配的.lib文件编译.dll,然后链接lib文件以便找到函数。

另一方面,在.Net库中,您只需要引用dll。但为此,它需要编译为.Net库。

使用/CLR标志编译dll。并将该类作为参考。Net类:

namespace Tests
{
    public ref class BDay
    {
    public:
        static double Foo(double);
    };
};

您不需要.Net 的declspec导出和导入

最新更新