在 VC++ 中创建 DLL (Visual Studio 2008)

Posted

技术标签:

【中文标题】在 VC++ 中创建 DLL (Visual Studio 2008)【英文标题】:Creating DLL in VC++ (Visual Studio 2008) 【发布时间】:2012-01-10 06:32:45 【问题描述】:

请帮助我,这真的很烦人,因为我是第一次这样做并且没有经验。

目标:求一个数的阶乘

。 . 第 1 步:创建 VC++ MFC 类型的新项目和模板 MFC DLL

第 2 步:然后创建一个常规 DLL(MFC 共享)我说是

第 3 步:我使用以下代码创建头文件 (ServerHeader.h)

_declspec (dllimport) int factorial(int no);

第 4 步:我使用代码创建 cpp 文件 (ServerFactorial.cpp)

#include "stdafx.h" 
_declspec (dllexport) int factorial(int no)



return no == 0 ? 1 : no * factorial(no-1);

第 5 步:我构建项目,一切都很好

第 6 步:我创建另一个项目客户端 VC++ Win32 和模板 Win32 控制台应用程序,应用程序设置为 EMPTY PROJECT,并使用代码创建一个新的 cpp 文件 (MainClass.cpp)

#include "ServerHeader.h"

#include <iostream.h>

void main()



int no,i;


cout<<"Enter number";


cin>>no;


i=factorial(n);  // calling the method


cout<<endl<<i;   // printing ans


第 7 步:我复制 ServerHeader.h、Server.dll、Server.lib(有 2 个库文件,一个是 Object,另一个是 Export)我将所有 4 个从服务器复制到客户端

第 8 步:右键单击客户端项目设置链接器的常规设置并写入我在客户端项目文件夹中复制的 lib 文件的路径

第 9 步:我构建了我得到的项目

错误 1 ​​致命错误 C1083:无法打开包含文件:'iostream.h':没有这样的文件或目录 f:\client\client\mainclass.cpp 2 Client

抱歉发了这么长的帖子。

【问题讨论】:

为什么要创建一个 MFC DLL 以从控制台应用程序调用?另外,显示您要编译的代码。您的包含语句是否如下所示:#include &lt;iostream&gt;? 不,它是 #include 但我已经尝试使用 #include 以及 #include "iostream.h" 和 #include "iostream" 但我得到了同样的错误 嗨 Cody Gray,我又试了一次,当我使用 #include 时,它说找不到 iostream.h,而当我使用 #include 时,它说“cout”和“ cin" 无法识别 那么您的 VS 2008 安装可能有问题。你能编译其他应用程序吗? 这是我第一次安装VS 2008。但是为什么会出现问题呢? 【参考方案1】:

应该是#include &lt;iostream&gt;,那么你需要在代码中包含命名空间std::cout,或者包含using namespace std 语句。

【讨论】:

感谢杰克逊,现在 cout 和 cin 错误不再存在,我正在使用 #include 但现在我收到以下错误 Error 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup MSVCRTD.lib 客户端错误 2 致命错误 LNK1120: 1 无法解析的外部 F:\Client\Client\ClientMain.exe 1 客户端 这通常表明你已经编写了一个控制台应用程序,但告诉 VS 构建一个 Windows 应用程序。如果你在谷歌上搜索到 LNK1120 的错误文本,你会发现很多解释和解决方案。 感谢Jackson 的帮助,主要问题是编写控制台应用程序和告诉VS 关于windows 应用程序。真正的愚蠢!!!!无论如何,我有两本关于 c++ 的书,他们使用 #include 可能是因为他们必须考虑 Turbo c++ 编译器,而这次我在 VS 上做 c++,所以它们在语法上有一些不同,我们会出错。我有 2 个问题(1)我们能否将 Turbo c++ 编译器集成到 VS 中,以便我可以使用旧语法............(2)或者考虑到 Microsoft 编译器和IDE 作为 VS。谢谢 我认为你的书可能已经相当老了,.h 格式已经被弃用了一段时间(见这里:members.gamedev.net/sicrane/articles/iostream.html)。我不认为您可以将 Tubo C++ 与 VS 集成,我当然不想尝试这样做!谷歌搜索 VS2008 和 C++ 书籍,那里有很多,但由于我自己没有任何书籍,所以我不愿意推荐一本,如果被推,我发现 Ivor Horton 的书写得很好,而且他有一本 VS2008 C++。 @RameshwarSoni:你可以在这里找到一本书:The Definitive C++ Book Guide and List。扔掉 Turbo C++ 和任何谈论它的书:这些书到现在已经 20 多年了,而且已经完全过时了。【参考方案2】:

如果你想使用共享库(dll)你不能直接调用阶乘。您必须使用 LoadLibrary 加载 dll,在调用 GetProcAddress 时使用结果句柄和函数名称,并调用返回的函数指针。为了能够按名称加载函数,您应该在 dll 中使用 extern "C" 说明符声明它,因此它的名称将不加修饰地导出。另一种方法是将 .def 文件添加到 dll 项目并使用带序号的 GetProcAddress。我希望这些大体方向对您有所帮助。

【讨论】:

以上是关于在 VC++ 中创建 DLL (Visual Studio 2008)的主要内容,如果未能解决你的问题,请参考以下文章

在启用 CLR 但没有 CRT 的 VC++ 中创建 Win32 dll

在 VS2013 中创建与 VC++ 6.0 向后兼容的 Dll

在 Visual Studio 2005 中创建 DLL

如何在 Visual C++ 中创建一个 dll? [关闭]

在 Visual Studio c++ 中创建将在 VB 中加载的 DLL

如何在visual studio2008中创建,编译和运行C++程序,