在通用 Windows 应用程序 C++ 上使用 win32 DLL 库

吉布斯

我能够按照本教程http://tutplusplus.blogspot.com/2011/04/c-tutorial-create-dll-in-vc-20102008.html 中指示的说明编译基于 dll 库我编译了它,没有问题。我还在一个空的 win32 控制台应用程序解决方案上测试了我的 dll 库,通过添加头文件、源文件和更改链接器设置,它编译得很好。问题是这次我无法在通用 Windows 应用程序解决方案上使用 dll 库。我添加了头文件和源文件并更改了链接器设置。

当我编译项目解决方案时,它要求我包含pch.h到我的库的源文件中,所以我#include "pch.h"在顶部添加了这一行

之后,出现了其他编译​​器错误。

'CreateFile': identifier not found'SetCommState': identifier not found

我相信我当前项目解决方案的编译重新编译了所有内容,而没有考虑 dll 库的编译。如何让项目解决方案只编译自己的源文件和头文件?

库标题:

#pragma once
#include <Windows.h>

namespace nmspace
{
    class SerialPort 
    {
    public:
        static __declspec(dllexport) int connect();
    };
}

库来源:

#include <iostream>
using namespace std;
#include "SimpleH.h"
#include <Windows.h>

namespace nmspace
{
    int SerialPort::connect() 
    {
        int error = 0;
        DCB dcb;

        memset(&dcb, 0, sizeof(dcb));

        dcb.DCBlength = sizeof(dcb);

        dcb.BaudRate = 57600;
        dcb.Parity = NOPARITY;
        dcb.fParity = 0;
        dcb.StopBits = ONESTOPBIT;
        dcb.ByteSize = 8;

        HANDLE m_serialPortHandle = CreateFile(L"COM7", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL, NULL);

        if (m_serialPortHandle != INVALID_HANDLE_VALUE) {
            if (!SetCommState(m_serialPortHandle, &dcb))
                error = 2;
        }
        else
            error = 1;

        return error;
    }

}
用户7860670

您将无法使用此 DLL,因为它使用SetCommState仅适用于桌面应用程序的功能。您应该在可用于 UWP 应用程序的桌面 API 列表中查找您尝试使用的函数

至于CreateFile它不是一个函数,而是一个扩展到CreateFileACreateFileW取决于项目 Unicode 设置的宏您应该CreateFile2改用它可用于桌面和 UWP 应用程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JNI C ++ DLL-'UnsatisfiedLinkError:%1不是有效的Win32应用程序'

从WIN32应用程序使用的C#COM DLL调用Java代码?

使用CreateProcess从Win32 C ++应用程序启动Java应用程序时出错

在Windows Server 2008上构建时,“不是有效的Win32应用程序”

如何使用C#在通用Windows应用程序中包含计时器

如何在Windows 10 C#通用应用程序中使用C ++类?

从Windows 10上的Win32 GUI应用程序输出到控制台

无法加载动态库php_sqlsrv_7_nts.dll不是有效的Win32应用程序

通用Windows应用程序到Win32应用程序

Windows上的Python Hadoop流式传输,脚本不是有效的Win32应用程序

Python ctypes DLL是“无效的Win32应用程序”

在Windows上使用Gradle Exec任务时Webpack'不是有效的Win32应用程序'

在C#WPF或Windows Forms应用程序中使用DirectX c ++ DLL

Win32在应用程序内使用资源字体

Windows XP上的Inno Setup安装程序显示“无效的Win32应用程序”

在Win32应用程序中使用Windows窗体

DLL加载失败-不是有效的Win32应用程序-使用NumPy

使用C#将颜色合并到位图中(通用Windows应用程序)

使用Win32 C ++和钩子从应用程序中的按钮获取文本

C#应用程序中的Win32异常

从通用Windows 10应用程序参考经典类库

无法添加ListViewItem-Windows通用应用程序C ++

将SQLite Windows窗体应用程序迁移到通用Windows应用程序(C#)

C#程序AccessViolationException中的Win32 DLL

从 Win32 控制台应用程序调用 dll [C]

在 win32 控制台应用程序中使用 ntdll.dll 好不好?

如何在 C#/Win32 api 中找到 Windows 应用程序执行别名的目标?

如何导出静态链接到 MFC 的常规 MFC DLL 的函数以与 C++ 中的非 MFC Win32 控制台应用程序一起使用

在外部 C++ Win32 应用程序中共享导出的 C++ DLL 事件