0

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

  • 创建 Win32 项目并从向导中选择 Empty Project、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 "Debug\generatory2.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:\Users\Patryk\Documents\Visual Studio 2010\Projects\generatory2\Debug\generatory2.exe : fatal error LNK1120: 2 unresolved externals

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

4

1 回答 1

2

如果您想将其引用为 .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 导出和导入

于 2013-07-27T19:36:48.067 回答