2

我有一个旧的遗留应用程序,用于通过串行端口与嵌入式控制器通信总线进行通信。别人开发的。

该应用程序是用 VB6 编写的,结构为两个项目 - 一个用于处理连接和通信逻辑的 DLL,以及一个应用程序 GUI 项目。

我希望能够编写一个新的应用程序 GUI(理想情况下在 C++ 中)以按原样使用现有的 DLL,但是我在解决如何导入它时遇到了很多问题。

所以我想知道,是否可以将这个旧 DLL 原样使用到 C++ 项目中?或者是否可以导入到 C# 项目中?还是 VB.NET 项目?(宁愿不使用 VB,但如果必须,可以)

我现在在哪里:

我有现有的已编译可执行文件和 DLL,它们在我的系统上运行。

我也有项目文件,它们都可以在 notepad++ 中读取,但我没有 VB6,并且将项目导入 Visual Studio VB.NET 2008 Express 一点也不简单。尤其是没有一个工作示例可以先挖掘和使用(DLL 项目可能是可导入的,但在升级报告中有 50 多个需要更改的内容。它似乎也忽略了三个对我来说非常重要的 .cls 文件不是特别精通 VB6 的眼睛......应用程序项目在升级报告中有一条关于“缺少设计时许可证”的消息,并且实际上似乎进入项目资源管理器的导入项目的唯一项目文件是项目文件本身,以及程序集信息文件。)

大多数如何将 DLL 导入 VS C++ 的示例都假设您有一个解决方案,该 DLL 项目与您的项目一起很好地编译,将使用它。或者至少是一个 .DLL 和 .lib 和 .h 文件...我与代码的原始开发人员交谈(在另一个城市,我们不直接工作)并得到一个 .lib 来匹配我的 .dll,但仍然没有 .h 文件。

我通常可以通过一些新的东西来抨击,但是即使在我可以理解的 VB6 中也没有该项目的基线工作示例,这使得这非常困难。此外,谷歌可以在网上找到类似的问题,这让我想知道这是否是我应该尝试的事情。

我正在努力获得 Visual Studio 的非快递副本,如果这会产生任何影响(到目前为止,快递对一切都很好,所以我再也不需要任何东西了),但这很可能需要数周时间。

任何建议将不胜感激。

谢谢阅读!

4

1 回答 1

1

我不得不否认这一点,因为我没有这样做的经验,但只是发现通过阅读有关该主题的文档应该是可能的。

如果有很多低级的事情发生,我不确定你是否会在 VB 到 .NET 的导入/转换过程中获得成功。现有的 dll 很可能是一个 COM 对象,不是吗?

似乎有一些 MSDN 文档可以让您使用 COM 对象 dll 从 C++ 开始 - 并且该#import指令看起来也会生成一些 .h(头文件)文件。

http://msdn.microsoft.com/en-us/library/8etzzkb6.aspx

所以我会尝试简单地#import为它添加一个指令。

#import "somelibrary.dll"

并查看 Visual Studio 生成的内容。

看看下面的例子,(从另一个论坛无耻地复制)

 #import "F:\proj\VB6\ActiveXDLL\VBTestDLL.dll"
 using namespace VBTestLib;

void CDialogTestDlg::OnButton1() 
{

 HRESULT hresult;
 CLSID clsid;
 _CTest *t; // a pointer to the CTest object
 _bstr_t bstrA = L"hello";
 _bstr_t bstrB = L" world"; 
 _bstr_t bstrR;
 ::CoInitialize(NULL);
  hresult=CLSIDFromProgID(OLESTR("VBTestLib.CTest"), &clsid);
  hresult= CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
                               __uuidof(_CTest),(LPVOID*) &t);
  if(hresult == S_OK)
  {
     bstrR  = t->vbConcat(bstrA , bstrB);
     AfxMessageBox((char*)bstrR);
   }
 }
于 2012-05-21T02:12:06.323 回答