我得到了一个小型库,包括.dll,.h标头和.def文件.我很确定这个库是用C语言编写的,但可能是C++.
我是否可以在不使用通常谈到的LoadLibrary/GetProcAddress/FreeLibrary方法的情况下访问库中的函数.我没有.lib文件 - 通常有一个吗?
我在过去的两天里一直在寻找这个.看来,因为我已经给出了一个头文件来定义我希望从dll和.def文件中使用的函数,所以我不需要手动显式地'加载'每个函数(LoadLibrary/GetProAddress/FreeLibrary) - 在在我的情况下,我将使用.dll中的大约5或6个函数,但是大约有70个可用,这似乎是一个球疼,并导致不必要的代码混乱.
谢谢你的建议.
我正在浏览遗留代码并找到以下代码段:
MyClass::~MyClass()
{
EnterCriticalSection(&cs);
//Access Data Members, **NO Global** members are being accessed here
LeaveCriticalSection(&cs);
}
Run Code Online (Sandbox Code Playgroud)
我想知道它有没有机会保护析构函数?
考虑一个场景:
1. Thread1 - About to execute any of the member function which uses critical section
2. Thread2- About to execute destructor.
Run Code Online (Sandbox Code Playgroud)
如果执行顺序是1 => 2那么它可能会起作用.但如果订单被撤销怎么办?
这是一个设计问题吗?
如何使用NSIS获取.NET版本?如果我没有必要的版本,它会将我重定向到一个网站下载它.
我已经找到了一些解决方案,但它们通常有一些硬编码的东西(例如几十个特定的链接).
这有什么好的解决方案吗?
谢谢
注意:我不想使用Windows安装程序/ clickonce.
有一个很好的J2ME IDE吗?我的意思是轻巧,便携.可以运行你在其上编程的东西.我最喜欢的Java IDE是JCreator Lite.J2ME有类似的东西吗?另外,你会说哪个是最好的J2ME IDE?
我在一家纯粹的微软商店担任ac#developer.
我最近开始自己在远离工作的空闲时间使用汽油和Linux进行装配.我喜欢搞乱Linux,但我仍然很新.
我一直听说我应该学习VIM或者Emacs,但问题是,我绝对不可能在工作中使用它们,所以我感到有点内疚倾向于掌握其中一个.更糟糕的是,我想知道学习VIM或Emacs是否会让我在视觉工作室变慢,因为我会混淆快捷键.
目前我正在使用SciTE在Linux上进行编辑(我认为这在Windows上变成了notepad ++).
对于在纯粹的ms产品环境中工作的人来说,有什么理由让我学习Emacs/VIM吗?我看到vs studio中有一个设置来使用Emacs快捷方式,有没有人通过在vs中掌握它们来提高效率,或者换句话说你能看到它值得吗?
提前致谢!
相关: 学习VIM值得努力吗?
相关: 是否值得花时间学习使用Emacs?
相关: 我为什么要使用IDE?(从其他方面来看)
我正在编写一个俄罗斯方块克隆,在我的游戏中,我将我的tetromino块存储为4x4块阵列.我现在需要能够旋转数组中的整数位置,以便我得到一个旋转的tetris块.我不能简单地旋转纹理,因为我的所有碰撞检测等都被设计为与2D数组一起使用.游戏是用CNA用CNA编写的.
我怎么可能顺时针/逆时针旋转我的2D数组的整数90度.
以下是我的"L"块存储的示例.
0 1 0 0
0 1 0 0
0 1 1 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我正在使用此代码阻止我的程序的第二个实例同时运行,是否安全?
Mutex appSingleton = new System.Threading.Mutex(false, "MyAppSingleInstnceMutx");
if (appSingleton.WaitOne(0, false)) {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
appSingleton.Close();
} else {
MessageBox.Show("Sorry, only one instance of MyApp is allowed.");
}
Run Code Online (Sandbox Code Playgroud)
我担心如果有什么东西抛出一个异常并且应用程序崩溃了Mutex仍然会被保留.真的吗?
我正在回答一些面试的测验问题,问题是如何进行屏幕抓取.也就是说,假设您没有更好的结构化方式直接查询信息(例如Web服务),从网页中挑选内容.
我的解决方案是使用XQuery表达式.表达式相当长,因为我需要的内容在HTML层次结构中非常深入.在找到具有id属性的元素之前,我必须以一种公平的方式搜索祖先.例如,抓取Product Dimensions的Amazon.com页面如下所示:
//a[@id="productDetails"]
/following-sibling::table
//h2[contains(child::text(), "Product Details")]
/following-sibling::div
//li
/b[contains(child::text(), "Product Dimensions:")]
/following-sibling::text()
Run Code Online (Sandbox Code Playgroud)
这是一个非常讨厌的表达,但这就是亚马逊提供Web服务API的原因.无论如何,这只是一个例子.问题不在于亚马逊,而在于屏幕刮擦.
面试官不喜欢我的解决方案.他认为它很脆弱,因为亚马逊改变页面设计可能需要重写XQuery表达式.调试与它所应用的页面中的任何内容都不匹配的XQuery表达式很难.
我并不反对他的陈述,但我认为他的解决方案没有任何改进:他认为最好使用正则表达式,并在运输重量附近搜索内容和标记.例如,使用Perl:
$html =~ m{<li>\s*<b>\s*Product Dimensions:\s*</b>\s*(.*?)</li>}s;
Run Code Online (Sandbox Code Playgroud)
我的反驳是,这也很容易让亚马逊改变他们的HTML代码.他们可能会给在首都(HTML标签<LI>),或者添加CSS属性或更改<b>到<span>或更改标签"产品尺寸:"到"尺寸:"或其他许多种变化.我的观点是正则表达式无法解决他在XQuery解决方案中提到的弱点.
但此外,正则表达式可以找到误报,除非您为表达式添加了足够的上下文.它还可能无意中匹配恰好位于注释,属性字符串或CDATA部分内的内容.
我的问题是,你用什么技术来进行屏幕抓取?你为什么选择这个解决方案?是否有一些令人信服的理由使用它?或者从不使用另一个?除了上面展示的那些之外,还有第三种选择吗?
PS:假设为了论证,没有Web服务API或其他更直接的方式来获取所需内容.
我当前的应用程序使用基于实例的数据访问层.我用连接字符串实例化图层.然后我调用一个可以执行某种命令的方法.例如,有一种方法可以填充数据集.基本上,我传递存储过程和任何SQL参数并获取数据集.有一个静态类来处理我的数据访问或基于实例的更好吗?我确实有一个带有对象的Domain层,但我没有像ORM那样映射对象.我将对象传递给工厂,然后实例化数据层以撤回数据集.然后我将数据集映射到对象.我计划更新我的应用程序(是的,转向C#),但我没有时间改变整个事情.我对插入更新做了同样的事情,并删除了.如果我现在正在做的事情还可以,请告诉我.你觉得这种方法有什么问题吗?否则,我该怎么办?我没写这堂课.我发现它在线,并认为这是我需要的.
以下是数据类的示例:
Public Sub New(ByVal connectionString As String)
_connectionString = connectionString
End Sub
Public Function FillDataset(ByVal cmd As String, ByVal cmdType As CommandType, Optional ByVal parameters() As SqlParameter = Nothing) As DataSet
Dim connection As SqlConnection = Nothing
Dim command As SqlCommand = Nothing
Dim sqlda As SqlDataAdapter = Nothing
Dim res As New DataSet
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(cmd, connection)
command.CommandType = cmdType
AssignParameters(command, parameters)
sqlda = New SqlDataAdapter(command)
sqlda.Fill(res)
Catch ex As Exception
'CreateDataEntry(ex, …Run Code Online (Sandbox Code Playgroud) 我有以下简单的C#代码:
private Stack<Person> m_stack = new Stack<Person>();
public void Add<T>(T obj)
where T : Person
{
m_stack.Push(obj);
}
Run Code Online (Sandbox Code Playgroud)
这将产生以下IL代码:
.method public hidebysig instance void
Add<(ConsoleApplication1.Person) T>(!!T obj) cil managed
{
// Code size 20 (0x14)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldfld class [System]System.Collections.Generic.Stack`1<class ConsoleApplication1.Person> ConsoleApplication1.Pool::m_stack
IL_0007: ldarg.1
IL_0008: box !!T
IL_000d: callvirt instance void class [System]System.Collections.Generic.Stack`1<class ConsoleApplication1.Person>::Push(!0)
IL_0012: nop
IL_0013: ret
} // end of method Pool::Add
Run Code Online (Sandbox Code Playgroud)
所以我的问题是......为什么拳击?(IL_0008)我可以理解向下转换甚至编译错误,但为什么拳击(Person是引用类型...)
提前致谢!