Visual Studio提供了很多可以在IDE中使用的$变量,例如$(SolutionDir).如何创建自己的变量,例如$(MY_INCLUDES_DIR)(可以由项目用户设置指向其标题)?它甚至可能吗?
当我逐步执行代码时,在Form的构造函数内部,调用以相同形式声明的方法.在我可以进入该方法之前,我得到一个System.IO.FileNotFoundException,并显示消息"无法找到指定的模块.(HRESULT异常:0x8007007E)".我尝试输入的成员方法被声明为不安全,因为它处理非托管C++代码,但就像我说的那样我永远不会进入该方法.
因为它听起来像DLL依赖问题,所以我运行了Dependency Walker.依赖性walker仅在SHLWAPI.DLL下显示MPR.DLL的问题.问题方法是WNetRestoreConnectionA,我从不打电话.依赖性walker FAQ表明这不是问题http://dependencywalker.com/faq.html.此外,这不是一个Web应用程序或任何东西.不幸的是我被VS2005困住了.
出现此问题的可能原因是什么?关于我可能缺少什么或如何调试此问题的任何想法?
当构造函数无法处理的构造函数中的方法抛出被检查的异常时,如果你确定应用程序无法处理它并且在没有对象的情况下将无用而将它们作为运行时异常抛出它们就可以了.建造?
我试图找到一种很好的方法来确定链接时的哪个模块导致某个库被处理为"/ DEFAULTLIB",如Visual Studio的详细链接器输出中所示.
这是我的情况,我有几个静态库先决条件,每个都有一个发布和一个调试版本(BlahD.lib和Blah.lib).由于某种原因,在链接时,所有*D.lib都被处理为默认库,即使我正在构建一个版本,其中非调试库被指定为"附加依赖项".如果我从不构建静态库的调试版本那些*D文件将不存在,并且会出现链接器错误(无法打开文件).
通过为所有这些违规的.lib文件指定/ NODEFAULTLIB,我可以成功构建我的项目.所有发布库都链接起来,每个人都很高兴.但我想了解这里发生了什么.是什么导致链接器处理这些*D.lib文件?我唯一的希望是编写某种脚本,在这个庞大的项目及其依赖项目(微软支持)中抛弃一切?即使这样我也不明白在dumpbin输出中要查找什么,这是否适用于.lib文件以及.obj文件?
情况如下:您有两个类都实现相同的接口,并且两个类一起工作以完成一些业务流程.
例如,对于networkUserManager
和localUserManager
实施IUserManager
其具有方法getUser()
. networkUserManager.getUser()
发出请求以获取User
队列并返回答复. localUserManager.getUser()
从队列中获取请求,在某个数据库中查找用户信息,然后使用用户数据进行回复.
当我看到类似于这样的东西时,我忍不住想知道这是不是很糟糕的设计.这是一个糟糕的设计,如果不是这样的例子,做这样的事情会是个好主意吗?
假设int NativeMethod(double, double *)
Native.dll中有一个c ++方法.我第一次尝试从托管代码调用此方法是(假设我不需要指定入口点)
[DllImport("Native.dll")]
private static extern int NativeMethod(double inD, IntPtr outD);
Run Code Online (Sandbox Code Playgroud)
然后使用我做的DLL
IntPtr x = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
NativeMethod(2.0, x);
//do stuff with x
Marshal.FreeHGlobal(x); //crash
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会在这里崩溃.我的第一个猜测是,由于DLL和我的应用程序可能使用不同的CRT这是一个堆问题.但如果是这样的话,为什么不会对NativeMethod的调用崩溃呢?该方法返回一个x,我可以成功地从中提取双精度.
我可以通过引用传递double来使导入工作
[DllImport("Native.dll")]
private static extern int NativeMethod(double inD, IntPtr outD);
Run Code Online (Sandbox Code Playgroud)
为什么FreeHGlobal在第一次尝试时崩溃,以及将指针传递给本机方法的推荐方法是什么?out关键字可能在这种情况下正常工作,但如果我需要Marshal一个字符串怎么办?我认为我无法绕过AllocH和FreeH ......
在协议缓冲区中有一种方法可以获得包含嵌套消息集合的消息吗?例如,消息Supervisor可能有一组Employees以及主管的名称和部门.
在.NET中,当我有一个可以作为多个类型存在的"值"时,我可以轻松地使用TypeConverter在这些类型之间切换(货币类型,xml数据与对象表示,等等).在Java中,我不确定处理这种情况的首选方法是什么.Java中是否有TypeConverter等价物?
假设您有一个托管类,它将委托成员转换为本机函数指针并将其交给本机代码.假设类/委托保留在范围内,并且在本机代码的生命周期内不会更改(因此GC不会明显破坏它).在这种情况下应该注意哪些其他问题?例如,GC是否可以移动委托或委托引用的实际方法,并使您的本机代码具有访问冲突?
使用带有BLAH_BLAH的VS2005定义以下预处理器条件为false:
#elif defined BLAH_BLAH
Run Code Online (Sandbox Code Playgroud)
但如果我改成它
#elif defined(BLAH_BLAH)
Run Code Online (Sandbox Code Playgroud)
是真的.
为什么括号在这里有所作为?