小编mac*_*nir的帖子

如何用#include替换此预处理器宏?

更新: 显然,您希望使用模板或基类而不是宏来执行此操作.不幸的是由于各种原因我不能使用模板或基类.


目前我正在使用宏来定义各种类的一堆字段和方法,如下所示:

class Example
{
  // Use FIELDS_AND_METHODS macro to define some methods and fields
  FIELDS_AND_METHODS(Example)
};
Run Code Online (Sandbox Code Playgroud)

FIELDS_AND_METHODS 是一个使用字符串化和令牌粘贴操作符的多行宏.

我想用以下类型的东西替换它

class Example
{
  // Include FieldsNMethods.h, with TYPE_NAME preprocessor symbol
  // defined, to achieve the same result as the macro.
  #define TYPE_NAME Example
  #include "FieldsNMethods.h"
};
Run Code Online (Sandbox Code Playgroud)

这里我#define类的名称(以前是宏的参数),FieldsNMethods.h文件包含原始宏的内容.但是,因为我是#including我可以在运行时进入代码,在调试时.

但是我TYPE_NAMEFieldsNMethods.h文件中" 预处理"和"标记粘贴" 预处理程序符号时出现问题.

例如,我想定义类的析构函数FieldsNMethods.h,所以这需要使用如下的值TYPE_NAME:

~TYPE_NAME()
{
  //...
}
Run Code Online (Sandbox Code Playgroud)

TYPE_NAME取而代之的是它的价值.

我正在尝试的是什么?我不能直接使用字符串化和令牌粘贴操作符,因为我不在宏定义中.

c++ macros include c-preprocessor

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

导出函数的默认调用约定是什么(VS2008)?

鉴于以下C++代码未在函数声明中提及调用约定,导出函数的调用约定是Exported什么?我的猜测是cdecl的默认值.

extern "C"
{
  __declspec (dllexport) bool Exported(int parm);
}
Run Code Online (Sandbox Code Playgroud)

我从托管代码中调用这个函数,使用LoadLibrary,GetProcAddressMarshal.GetDelegateForFunctionPointer.我可以使用不同的UnmanagedFunctionPointer属性值来装饰我的委托定义,它们似乎都可以工作.

c# c++ calling-convention dllexport visual-studio-2008

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

What's the correct usage of Microsoft.Build.Evaluation?

I want to programmatically add an Import to an MSBuild project. The API in this Microsoft.Build.Evaluation namespace allows me to to this (I'd prefer to achieve the same result through the VS extensibility API but there doesn't seem to be any way to do that so I'm resorting to this API).

If I want to open one or more Projects in a method, look at their Imports, and sometimes add an import, how am I supposed to use ProjectCollection object? …

msbuild

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

是否可以在Windows上打开"仅本地计算机"套接字?

我想知道是否可以配置TCP套接字使其无法接受来自"off-machine"的连接.

我想启动一个只能从同一台机器上运行的客户端访问的HTTP服务器,虽然我总是可以从机器外过滤出"未经授权"的请求,但如果这个仅限本地的行为被烘焙,我更愿意这样做 - 在.

此外,在Windows上打开套接字会触发防火墙警告,并请求用户阻止/取消阻止正在打开的端口.如果套接字可以配置为只接受本地连接,我希望存在避免此消息的方法.

sockets windows tcp

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

如何使用C#访问Outlook用户的日历?

在给定用户的电子邮件地址的情况下,我想访问Outlook用户日历中的约会.

这可能涉及以某种方式使用Microsoft.Office.Interop.Outlook.NameSpace对象来访问用户的日历.

c# outlook

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

如何制作"部分"模态对话框?

有没有办法开始以模态方式显示对话框,而不是隐藏它,以便在将其更改为非模态对话框时保持可见?

我想显示一个对话框,阻止显示对话框的方法.然后,当用户单击我想要的对话框上的"完成"按钮时:

  • 保持可见的对话框.
  • 控制返回显示对话框的方法.

我通过在一个单独的STA线程上运行对话框,并使用事件来阻止主UI线程直到按下"完成"来实现这个结果,但是这个方法有一个问题:你可以点击关闭按钮.对话框可见时显示"主"窗口,隐藏对话框时主窗口关闭.

更新

感谢到目前为止的回复.对不起 - 看起来我在太多的背景和不够之间得到了平衡.

该表单实际上是一个模态"向导"对话框 - 它出现,模态地位于主应用程序的前面,然后被隐藏.因此,就用户而言,没有非标准的怪异.唯一的区别是对话框是由来自UI线程的一系列回调驱动的,所以我不认为它的真实模态(通过调用ShowDialog)的生命周期是可行的.第一个回调必须显示对话框,然后在用户通过对话框UI设置其首选项时阻止.之后,对话框保持可见并显示进度条页面,同时从UI线程进行各种其他回调.最终表格被隐藏了.表单启动时,用户不与主窗口交互.就他们而言,它似乎应该是主UI线程的100%模态.

(该表单是Visual Studio向导的对话框 - 这些是由UI线程上的一系列回调驱动的).另一种方法是显示对话框,隐藏它,立即显示最顶层的"进度"表单,然后隐藏它,但我认为显示单个对话框对用户来说是更加无缝的体验.

再次 - 抱歉混乱!

winforms

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