我试图弄清楚如何编写一个宏,将一个变量名称的字符串文字表示与变量本身一起传递给一个函数.
例如,给出以下功能.
void do_something(string name, int val)
{
cout << name << ": " << val << endl;
}
Run Code Online (Sandbox Code Playgroud)
我想写一个宏,所以我可以这样做:
int my_val = 5;
CALL_DO_SOMETHING(my_val);
Run Code Online (Sandbox Code Playgroud)
哪个会打印出来: my_val: 5
我尝试过以下操作:
#define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR);
Run Code Online (Sandbox Code Playgroud)
但是,正如您可能猜到的那样,引号内的VAR不会被替换,而只是作为字符串文字"VAR"传递.所以我想知道是否有办法让宏参数变成字符串文字本身.
我们有一个大型项目,我使用Enterprise Architect版本10将项目中的小包逆向工程为UML以进行重构.我想只包含将要包含在我要创建的图表中的元素(我知道这是愚蠢的,但我们不能有1个模型来统治它们).
我想反转所有源代码,然后删除所有未在我的图表上结束的元素.有没有办法做到这一点?我知道我可以从GUI中找到图表中的任何给定元素,那么至少有一种方法来编写脚本吗?
另一种方法是手动选择所有依赖项并仅反转那些文件,我可能最终会这样做.
谢谢
这里发布的是一个答案,指示错过旧window.showModalDialogJavaScript函数的人使用
<dialog>
Run Code Online (Sandbox Code Playgroud)
元素而不是.我已经将它与IE和FF所需的polyfill一起使用,并且它可以工作.但是,使用我希望避免使用Chrome的polyfill时会出现明显的延迟(更不用说在浏览器支持时不会使用polyfill的警告).如何检测对话框元素是否受支持,以便省略polyfill处理?特别是这些线:
var dialog = document.getElementById('<element id>');
dialogPolyfill.registerDialog(dialog);
Run Code Online (Sandbox Code Playgroud) 我的程序中有以下行导致运行时警告:
if (!is_directory("C:\\NGFMS_Debug\\Files") && !create_directories("C:\\NGFMS_Debug\\Files"))
Run Code Online (Sandbox Code Playgroud)
警告的文本如下:"XXX.exe中发生缓冲区溢出,已损坏程序的内部状态."
警告来自对"is_directory(...)"的调用.我猜这个字符串的空间没有被分配,但我认为这样的语法是合法的.
is_directory函数是boost/filesystem.hpp的一部分,我使用以下命名空间:
using namespace boost;
using namespace boost::filesystem;
using namespace std;
Run Code Online (Sandbox Code Playgroud)
这是在VS2005 C++下编译的.有任何想法吗?
更新
我尝试了几个不同的东西并逐步完成了代码,这就是我找到的东西.
如果我这样做
char* path_chars_c;
path_chars_c = "C:\\Debug\\Files";
string path_str_c(path_chars_c);
Run Code Online (Sandbox Code Playgroud)
变量path_chars_c包含适当的字符串,但变量path_str_c在初始化后包含垃圾.所以看起来字符串初始化在这里被打破了.有没有人见过这个?
这应该是一个相当普遍的问题,但我没有在任何地方找到直截了当的答案.
如果我在VB.NET中的函数中实例化一个对象并返回它,它是通过引用还是通过值返回它.IE - 如果我写这样的话,我应该担心性能:
Public Function ret_obj_func() As big_object
Dim ret_obj As New big_obj(<lots of stuff>)
Return ret_obj
End Function
Run Code Online (Sandbox Code Playgroud)
如果我从其他地方调用此函数,它是否会在ret_obj中实例化该对象,然后创建一个深层副本以将副本传回给调用者,或者它只是传回一个引用?
我正在准备自己的测试IdentityServer,但遇到了麻烦。必须为每个基于浏览器的客户端指定ClientUri和RedirectUris。我知道这些可以存储在数据库中,但是有什么方法可以在这里插入通配符?
我们每个客户都有自己的子域,我想通过允许所有尝试访问* .ourcompany.com上我们任何应用程序的浏览器都被视为身份服务器中的同一客户端来简化用户管理。这可能吗。
关于使用共享内存我有两个问题.我正在使用CreateFileMapping在两个进程之间创建共享内存区域.
1)我知道我需要在从CreateFileMapping或OpenFileMapping调用返回的每个句柄上调用CloseHandle以释放内存.我的问题是,如果使用共享内存的程序退出而不调用CloseHandle,那么所有句柄是否都会被Windows XP/7解除分配?IE - 使用mem的所有进程关闭后是否有可能发生内存泄漏?
2)我使用MapViewofFile获取指向mem的指针.在一个实例中,我假设共享内存将始终存在于方法的上下文中.所以我已经将MapViewOfFile的返回值保存为指针并关闭了mem的句柄,我只是使用指向共享内存的指针(但仍然锁定对它的访问).这样安全,还是每次访问共享内存时都应该调用MapViewOfFile?
谢谢,
伊恩
我正在编写一个具有共享内存的应用程序,并且正在创建具有适当"Local\"前缀的命名互斥锁。但是,每次我调用该CreateMutex函数来创建句柄时,都会得到一个NULL返回值。我什至尝试OpenMutex在那之后打电话并获得NULL回报。
该GetLastError()函数返回6,这意味着ERROR_INVALID_HANDLE。我相信这发生在第一次尝试在任何进程中创建这个命名的互斥锁时。我windows.h在包含一些 MFC 组件之后包含并且正在CMutex应用程序的其他地方使用;所以我不知道这是否有问题。我总是传递NULL和传递FALSE前两个参数,并且使用的是 Windows XP。
这是我的代码功能的摘要:
char to_name[16] = "Local\\to_1";
d_mutex_to_h = CreateMutex(NULL, FALSE, to_name);
if (d_mutex_to_h == NULL)
{
d_mutex_to_h = OpenMutex(NULL, FALSE, to_name);
}
Run Code Online (Sandbox Code Playgroud) 美好的一天,
我正在用VC++开发一个应用程序,它在Windows XP上使用UDP协议和winsock进行通信.以前我已经能够假设该工具接收的所有数据包都来自单个目标.但是我现在正在接收广播.监听线程的开销很小,应该将所有时间都花在下面的行上:
rv = recvfrom(socket,
p_buffer_p,
p_size,
0,
(sockaddr*)&clientService_in, //This is set to do a broadcast recv
&SenderAddrSize);
Run Code Online (Sandbox Code Playgroud)
我的问题是我是否可以假设我从recvfrom返回的缓冲区来自单个目标.也就是说,发送应用程序中的1个调用发送应用程序等于从接收应用程序中的recvfrom返回1?或者多个发件人的多个发送可以合并为1?
我假设来自目标的单个发送不能从recvfrom分成多个返回.我一直都是这样,从来没有遇到任何问题.
还有一件事,它是一个SOCK_DGRAM类型的套接字.
我正在处理C#代码中的char*(在不安全的部分).有没有办法从C#调用strlen函数.不得不编写自定义strlen函数来搜索null终止符,这违背了所有常识.有没有办法从C#调用strlen或我可以访问的类似方法?
在大图中我试图将char*转换为字符串对象,但字符是ANSCII格式,所以我将使用.NET Encoding.Convert命名空间进行转换.但在我这样做之前,我需要知道字符串的长度.
我正在使用 Forms.Controls.Find 方法来搜索父控件的子控件。该方法有 2 个参数;(键,搜索所有儿童)。我知道 Key 参数对子控件的名称进行字符串比较,并使用具有匹配名称的控件填充返回数组。但是,我不知道 SearchAllChildren 参数的意义。
MSDN文档说:true则搜索所有子控件;否则为假。这是什么意思?无论如何,它不会搜索所有子控件吗?这是为了控制搜索是否递归?因此,如果为 true,那么搜索将遍历所有子级的子级以及子级的子级的所有子级等,但如果为 false,则只会遍历第一级子级?
谢谢,
我有一个使用 SDL_mixer 库(http://www.libsdl.org/projects/SDL_mixer/)播放一些声音的程序。当我只使用 Mix_OpenAudio 打开与默认设备的连接时,它运行良好。但是,我需要针对特定的音频设备。我看到 SDL 库本身有一个名为 SDL_OpenAudioDevice 的方法,它可以满足我的需要,但是我必须编写自己的混音器和所有这些东西。
任何人都知道如何使用 SDL_mixer 打开特定的音频设备,或用于支持此功能的 SDL 的不同混音器?我真的不想写我自己的混音器。我正在用 C++ 在 Windows 7 上开发一个 Win32 应用程序。
我们的代码当前使用旧的 Microsoft.WindowsAzure.Storage 库来访问 Azure 中的 blob 存储。我正在尝试使用新的 v12 Azure.Storage.Blobs 库来替换旧的库,但是我不知道如何解密/加密 blob。MS 文档(https://learn.microsoft.com/en-us/azure/storage/blobs/storage-encrypt-decrypt-blobs-key-vault?tabs=dotnet)很有帮助地说,v12 代码片段不是尚未准备好,因此没有代码示例。
旧代码是这样的:
var tokenProvider = new AzureServiceTokenProvider();
var cloudResolver = new KeyVaultKeyResolver(
new KeyVaultClient.AuthenticationCallback(_tokenProvider.KeyVaultTokenCallback));
var encryptionThingy = await cloudResolver.ResolveKeyAsync(<Key Vault URL> + "/keys/" + <key name>, CancellationToken.None);
var policy = new BlobEncryptionPolicy(encryptionThingy, cloudResolver);
var options = new BlobRequestOptions() { EncryptionPolicy = policy };
await <ICloudBlob Instance>.DownloadToStreamAsync(<stream>, null, options, null);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经得到了这里的新代码:
var azureKeys = new KeyClient(new Uri(<key vault url>), new DefaultAzureCredential());
var encKey = azureKeys.GetKey(<key name>);
ClientSideEncryptionOptions …Run Code Online (Sandbox Code Playgroud)