我能够按照本教程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库的编译。如何让项目解决方案只编译自己的源文件和头文件?
Lib Header:
#pragma once
#include <Windows.h>
namespace nmspace
{
class SerialPort
{
public:
static __declspec(dllexport) int connect();
};
}
Lib资料来源:
#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;
}
}
答案 0 :(得分:3)
您无法使用此DLL,因为它使用的SetCommState
功能仅适用于桌面应用程序。您应该在list of desktop APIs available for UWP applications中查找要尝试使用的函数。
对于CreateFile
,它不是一个函数,而是根据项目Unicode设置扩展到CreateFileA
或CreateFileW
的宏。您应该使用CreateFile2
代替桌面和UWP应用程序。
答案 1 :(得分:1)
原因很简单。 WinRT不支持完整的WinApi!您必须使用UWP Namespace
中的WinRT功能只需阅读CreateFile的文档即可。在您根据要求找到的文件中:
支持的最低客户端Windows XP [仅限桌面应用] 最低要求 支持的服务器Windows Server 2003 [仅限桌面应用程序]
这告诉您WinRT中不允许使用CreateFile。