【问题标题】:64 bit version of vspdctl.dll64 位版本的 vspdctl.dll
【发布时间】:2015-12-16 14:33:41
【问题描述】:

我正在 VS2013 上创建一个应用程序,它使用 vspdctl.dll 创建虚拟串行端口对。此虚拟端口用于与我的 PC 上运行的其他应用程序进行通信。

.exe 文件在我使用 Platform=win32 配置编译/链接时已成功创建,并且虚拟端口创建工作正常。 注意:我的机器是 x64

当我更改平台=x64 时,我的 exe 再次创建,没有任何问题,但仍然无法加载 dll。它让我感觉 vspdctl.dll 是一个 32 位的库。

但我打算在代码中使用其他 64 位库,这就是为什么我也希望在 64 位应用程序中实现 vspdctl.dll。是否有任何 64 位版本的 vspdctl.dll 或如何在 64 位应用程序中实现 32 位 dll。

任何帮助将不胜感激。 谢谢

这是我加载 dll 的 CreateVSPair 函数的代码

char CreateVSPair(char *Port1, char *Port2) {
OSVERSIONINFO VersionInfo;
HINSTANCE libInst;
libInst = LoadLibrary(L"C:\\AK47 Data\\Softwares\\SP monitor\\vspdctl.dll");
if (!libInst)
{
    libInst = LoadLibrary(L"C:\Windows\SysWOW64\\vspdctl.dll");
    if (!libInst)
        return -10; /* Couldn't load library */
}
/* Substitute the typedefs above for functions other than CreatePairFn */
std::string s("CreatePair");
CreatePairFn CreatePair = (CreatePairFn)GetProcAddress(libInst, s.c_str());
if (CreatePair == 0) return -20; /* Couldn`t find function */
bool returnvalue = CreatePair(Port1, Port2); /* For example, Port1 = "COM5" and Port2 = "COM6" */
FreeLibrary(libInst);
return returnvalue;

};

【问题讨论】:

  • 使用属性错误处理,调用GetLastError()获取LoadLibrary()失败的原因。并使用电话,致电供应商寻求支持。

标签: visual-studio dll 64-bit platform virtual-serial-port


【解决方案1】:

有 vspdctl64.dll 可用,我之前没有注意到。

【讨论】:

  • 嗨,我在 QT prj 中添加了这个 dll 库并找到了 symol "CreatePair" 但无法做到 bool CreateVSPair(char *Port1, char *Port2) { QLibrary lib("libs\\vspdctl.dll"); lib.load(); if(!lib.isLoaded()) qDebug() << "hi"+lib.errorString(); if(lib.isLibrary("libs\\vspdctl.dll")) qDebug() << "it is library"; CreatePairFn CreatePair=(CreatePairFn)lib.resolve("CreatePair"); if (CreatePair==0) { return false; } bool v = CreatePair(Port1, Port2); return v; };void MainWindow::clicked() { CreateVSPair( "COM1", "COM2"); }
猜你喜欢
  • 2019-10-21
  • 2021-07-08
  • 2011-01-20
  • 2022-01-13
  • 2014-05-29
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多