问题列表 - 第5936页

在C++中使用带有.h头的DLL

我得到了一个小型库,包括.dll,.h标头和.def文件.我很确定这个库是用C语言编写的,但可能是C++.

我是否可以在不使用通常谈到的LoadLibrary/GetProcAddress/FreeLibrary方法的情况下访问库中的函数.我没有.lib文件 - 通常有一个吗?

我在过去的两天里一直在寻找这个.看来,因为我已经给出了一个头文件来定义我希望从dll和.def文件中使用的函数,所以我不需要手动显式地'加载'每个函数(LoadLibrary/GetProAddress/FreeLibrary) - 在在我的情况下,我将使用.dll中的大约5或6个函数,但是大约有70个可用,这似乎是一个球疼,并导致不必要的代码混乱.

谢谢你的建议.

c++ dll header function

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

析构函数应该是线程安全的吗?

我正在浏览遗留代码并找到以下代码段:

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那么它可能会起作用.但如果订单被撤销怎么办?

这是一个设计问题吗?

c++ multithreading destructor

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

NSIS:查找并下载.Net版本

如何使用NSIS获取.NET版本?如果我没有必要的版本,它会将我重定向到一个网站下载它.

我已经找到了一些解决方案,但它们通常有一些硬编码的东西(例如几十个特定的链接).

这有什么好的解决方案吗?

谢谢

注意:我不想使用Windows安装程序/ clickonce.

.net nsis

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

有一个很好的J2ME IDE吗?

有一个很好的J2ME IDE吗?我的意思是轻巧,便携.可以运行你在其上编程的东西.我最喜欢的Java IDE是JCreator Lite.J2ME有类似的东西吗?另外,你会说哪个是最好的J2ME IDE?

java ide java-me

20
推荐指数
3
解决办法
7412
查看次数

有没有理由让C#开发人员学习Emacs/Vim?

我在一家纯粹的微软商店担任ac#developer.

我最近开始自己在远离工作的空闲时间使用汽油和Linux进行装配.我喜欢搞乱Linux,但我仍然很新.

我一直听说我应该学习VIM或者Emacs,但问题是,我绝对不可能在工作中使用它们,所以我感到有点内疚倾向于掌握其中一个.更糟糕的是,我想知道学习VIM或Emacs是否会让我在视觉工作室变慢,因为我会混淆快捷键.

目前我正在使用SciTE在Linux上进行编辑(我认为这在Windows上变成了notepad ++).

对于在纯粹的ms产品环境中工作的人来说,有什么理由让我学习Emacs/VIM吗?我看到vs studio中有一个设置来使用Emacs快捷方式,有没有人通过在vs中掌握它们来提高效率,或者换句话说你能看到它值得吗?

提前致谢!

相关: 学习VIM值得努力吗?
相关: 是否值得花时间学习使用Emacs?
相关: 我为什么要使用IDE?(从其他方面来看)

vim emacs visual-studio

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

如何旋转2D整数数组

我正在编写一个俄罗斯方块克隆,在我的游戏中,我将我的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)

谢谢你的帮助.

c# c++ arrays math

17
推荐指数
3
解决办法
2万
查看次数

是否使用Mutex来防止同一程序的多个实例运行安全?

我正在使用此代码阻止我的程序的第二个实例同时运行,是否安全?

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仍然会被保留.真的吗?

c# mutex single-instance winforms

45
推荐指数
4
解决办法
5万
查看次数

屏幕抓取:正则表达式还是XQuery表达式?

我正在回答一些面试的测验问题,问题是如何进行屏幕抓取.也就是说,假设您没有更好的结构化方式直接查询信息(例如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或其他更直接的方式来获取所需内容.

regex xquery screen-scraping

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

数据访问层静态还是基于实例?

我当前的应用程序使用基于实例的数据访问层.我用连接字符串实例化图层.然后我调用一个可以执行某种命令的方法.例如,有一种方法可以填充数据集.基本上,我传递存储过程和任何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)

vb.net data-access-layer .net-3.5

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

在C#中使用泛型时的装箱

我有以下简单的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是引用类型...)

提前致谢!

c# generics

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