小编jef*_*ffm的帖子

Windows 8的驱动程序签名要求发生了哪些变化?

我有一个直通NDIS中间驱动程序,由两个.inf文件(一个标准和一个微型端口)和一个.sys文件组成.由于Windows 7驱动程序签名要求,我必须获得代码签名证书并签署.sys文件,以便驱动程序安装在64位系统上.这很好用,我有很多成功的Windows 7安装.

但是,Windows 8 Consumer Preview(64位)上的相同安装程序失败.如果我在Windows Signature Enforcement关闭的情况下启动,它会正确安装,因此它绝对是一个签名问题.为了让我的驱动程序安装,我需要遵循Windows 7和Windows 8之间的新要求?

c++ install driver digital-signature windows-8

15
推荐指数
1
解决办法
8963
查看次数

从DLL导出STL std :: basic_string模板时,出现LNK2005错误

好的,所以我已经阅读了几个关于这个主题的问题和文章,我觉得我理解基础知识,但我仍然遇到麻烦.

我有一个DLL导出一个具有std :: string作为成员的类.我的主程序包含也有字符串的类,它使用DLL.

如果我在VS2010中编译DLL,我会收到以下警告:

warning C4251: 'MyClass::data' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'MyClass'
Run Code Online (Sandbox Code Playgroud)

当我编译EXE时,我得到相同的警告,但没有错误,程序编译并运行.实际上,这是一个大项目,所以我得到了40个警告,我不太热衷于此.(作为侧面观察,使用VS2008编译时不会出现这些警告)

所以,我读到了这个警告,它引导我阅读这篇MS文章:http: //support.microsoft.com/default.aspx? scid = KB; EN-US; 168958,它告诉我如何从一个STL模板导出DLL来满足我得到的警告.

问题是,当我添加以下行以删除警告时:

EXPIMP_TEMPLATE template class DECLSPECIFIER std::allocator<char>;
EXPIMP_TEMPLATE template class DECLSPECIFIER std::basic_string< char, std::char_traits<char>, std::allocator<char> >;
Run Code Online (Sandbox Code Playgroud)

DLL编译没有警告,但是当我编译我的EXE时,链接器会抛出一个拟合:

2>SampleDLL.lib(SampleDLL.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in OtherClass.obj
2>SampleDLL.lib(SampleDLL.dll) : error LNK2005: "public: unsigned int __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::size(void)const " …
Run Code Online (Sandbox Code Playgroud)

c++ dll stl visual-studio-2010

10
推荐指数
1
解决办法
1万
查看次数

什么是.NET最好的文字处理组件

我正在寻找一个.NET的文字处理组件,它在我的WinForm/WPF .NET应用程序中就像一个嵌入式MS Word.主要目标是让用户能够创建丰富的格式化文本.我真的不想写一个高度自定义的RichTextBox组件.有什么建议?

.net components word-processor

9
推荐指数
3
解决办法
1万
查看次数

最有效的替代IsBadReadPtr?

我有一些Visual C++代码接收指向缓冲区的指针,该缓冲区包含需要由我的代码处理的数据和该缓冲区的长度.由于我的控制之外的错误,有时这个指针未初始化我的代码或者不适合阅读(即当我尝试访问缓冲区中的数据时它会导致崩溃.)

所以,我需要在使用它之前验证这个指针.我不想使用IsBadReadPtr或IsBadWritePtr,因为每个人都认为他们是错误的.(谷歌他们的例子.)他们也不是线程安全的 - 在这种情况下可能不是一个问题,虽然线程安全的解决方案会很好.

我已经看到了通过使用VirtualQuery实现这一点的建议,或者只是在异常处理程序中执行memcpy.但是,需要进行此检查的代码是时间敏感的,因此我需要最有效的检查,这也是100%有效.任何想法,将不胜感激.

为了清楚起见:我知道最好的做法是只读坏指针,让它引起异常,然后追溯到源并修复实际问题.但是,在这种情况下,坏指针来自我无法控制的Microsoft代码,所以我必须验证它们.

另请注意,我不关心指向的数据是否有效.我的代码正在寻找特定的数据模式,如果没有找到它们将忽略它们.我只是想防止在对这些数据运行memcpy时发生崩溃,并且在尝试memcpy时处理异常需要在我的代码中更改十几个地方(但如果我有像IsBadReadPtr这样的东西来调用我只会必须在一个地方更改代码).

c++ memory windows visual-c++

8
推荐指数
3
解决办法
1万
查看次数

在我的应用程序退出之前终止的线程上调用CoUninitialize是否很重要?

我打电话给CoInitializeEx,具体来说:

CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED);
Run Code Online (Sandbox Code Playgroud)

在我的应用程序创建的线程中,但随后在应用程序退出之前终止.将这些与CoUninitialize调用配对是否很重要,或者在线程终止时是否释放这些资源?

windows com visual-c++

7
推荐指数
1
解决办法
3689
查看次数

std :: string擦除最后一个字符失败?

我正在尝试将通配符形式的用户输入更改("*word*")为正则表达式格式.为此,我使用下面的代码去除'*'输入的开头和结尾,以便我可以在任一端添加正则表达式字符:

string::iterator    iter_begin = expressionBuilder.begin();
string::iterator    iter_end = expressionBuilder.end();
iter_end--;
if ((char)*iter_begin == '*' && (char)*iter_end == '*')
{
    expressionBuilder.erase(iter_begin);
    expressionBuilder.erase(iter_end);
    expressionBuilder = "\\b\\w*" + expressionBuilder + "\\w*\\b";
}
Run Code Online (Sandbox Code Playgroud)

然而,调用"expressionBuilder.erase(iter_end)"不会删除尾随'*'从输入字符串,所以我风与不正确的正则表达式.我在这做错了什么? "(char)*iter_end == '*'"对于要运行的if语句中的代码必须为true(它确实如此),那么为什么传递给erase()时相同的迭代器不起作用?

c++ string

5
推荐指数
2
解决办法
4453
查看次数

在 Catel 命令中使用参数

我尝试在 Catel 的命令中使用参数:

public Command MyCommand { get; private set; }

MyCommand = new Command(MyCommand_Execute);

private void MyCommand_Execute(object parameter)
{
}
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

'Catel.MVVM.Command.Command(System.Action, System.Func, object)' 的最佳重载方法匹配有一些无效参数

我遵循了示例 Catel 代码,有什么想法吗?

wpf command catel

2
推荐指数
1
解决办法
1161
查看次数

用户进程看不到服务创建的全局共享内存

我有一个 Windows 服务(在系统进程中运行)和一个需要共享配置结构的桌面应用程序。数据源自应用程序,但用户进程无权创建全局内存对象,因此我在服务开始使用 CreateFileMapping() 和基于此答案的 DACL 时创建它。这似乎工作正常:我从 CreateFileMapping() 得到一个非空句柄,GetLastError() 为 0。问题是应用程序看不到对象——OpenFileMapping() 返回一个 NULL 句柄和 ERROR_FILE_NOT_FOUND——如果我使用 WinObj 手动浏览全局对象,我也看不到它。是什么让我的对象不可见?

SECURITY_ATTRIBUTES security;
ZeroMemory(&security, sizeof(security));
security.nLength = sizeof(security);
ConvertStringSecurityDescriptorToSecurityDescriptor(
    "D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GWGR;;;IU)",
    SDDL_REVISION_1,
    &security.lpSecurityDescriptor,
    NULL);
HANDLE  hFile = CreateFileMapping(INVALID_HANDLE_VALUE, &security, PAGE_READWRITE, 0, 1024*4, "Global\\gCONFIGXFILE");
DWORD   fileMappingResult = GetLastError();
if (hFile)
{
    CloseHandle(hFile);
}
LocalFree(security.lpSecurityDescriptor);
Run Code Online (Sandbox Code Playgroud)

c++ windows security winapi memory-mapped-files

2
推荐指数
1
解决办法
945
查看次数

C#MediaElement Video,如何从资源添加视频?

我拥有MediaElement,并且我想播放视频,因为我知道这样做的唯一方法是设置此项Source

mediaElement1.Source = new Uri(fileName);
Run Code Online (Sandbox Code Playgroud)

但是现在我有了要播放的资源文件,但我不能这样做,因为它没有路径。为了简而言之,我正在寻找一种方法来从资源文件中播放madiaElement中的视频(不首先写入其字节)。

c# wpf

1
推荐指数
1
解决办法
6093
查看次数