问题列表 - 第17587页

将EXE作为DLL加载,本地vftable

我有一个名为exe的exe test.exe,它通常用作独立的应用程序.我想在另一个应用程序app.exe中使用此exe作为模块(dll).

test.exe中的代码做了一些非常简单的事情:

void doTest()
{
    MyClass *inst = new MyClass();
    inst->someMethod();
}
Run Code Online (Sandbox Code Playgroud)

someMethod()虚拟和MyClass 在哪里有虚拟的.
doTest()从test.exe导出,因此创建了一个名为test.lib的lib,app.exe
与此lib链接,以便在启动时静态加载test.exe.

当我运行test.exe独立运行时它运行得很好但是当我运行它从app.exe中加载它崩溃了.
使用调试器进入代码后发现崩溃是在对虚方法的调用中.事实证明,vftable不知何故变坏了.

经过一些调查后发现,当MyClass的构造函数中的代码正在运行时,vftable是一回事,但是当new返回它的调用被替换为其他名为"local vftable"的东西时.我发现了这个模糊的讨论,为什么会这样.

经过大约一天的调试后,我发现这个"本地vftable"中的指针在两种情况下是相同的,当test.exe是独立的并且当它作为模块加载时.这可能是正确的,因为test.exe被加载到不同的地址...
为了测试这个理论,我将链接器选项中的加载地址更改为当app.exe在app.exe中时加载test.exe的地址一切顺利,瞧,一切正常.

显然,这不是一个永久的解决方案,因为下次这个随机选择的地址可能会被占用,同样的问题会再次出现.

所以我的问题:为什么这个"本地vftable"绑定到exe的静态加载地址?将exe作为模块加载是一件坏事吗?为什么exe假设它被加载到它的静态地址?

仅供上下文使用:这一切都是通过MSVC 2008,Windows XP x64完成的.

c++ dll exe vtable

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

更改列的默认值

我有一个表'CompanyID int not null'的表,其默认值设置为10.现在我想编写一个查询,将此默认值更改为1.我怎么能这样做?

任何帮助将不胜感激.我正在使用SQL Server 2000.

sql default sql-server-2000

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

在Rails中国际化动态内容

我们想要构建一个应用程序,我们也希望显示动态内容的翻译版本.翻译的内容将由我们上传(因此我们不需要任何翻译逻辑).

我想知道除了内置的i18n之外是否还有其他宝石需要考虑?i18n似乎最适合静态数据,但不处理动态数据.

ruby-on-rails

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

使用WinINET为虚拟用户创建强大的HTTP连接

我正在制作一个程序,使用Wininet系列API在Windows上从Internet下载一个简单的文件,因为我想利用它与IE兼容的代理行为.众所周知,目前的IE有几个代理设置:自动检测(WPAD),自动配置(PAC),手动单URL,每个协议的代理服务器,袜子,直接,...对于大多数用户,"直接下载" 工作良好; 但对于某些用户(特别是那些在防火墙/ NAT后面的用户),他们在建立连接时总是需要特殊的代理设置.

编写代码来处理所有这些情况是很痛苦的,所以我希望WinINET InternetOpen (INTERNET_OPEN_TYPE_PRECONFIG)可以帮助我.它适用于大多数用户,但我仍然发现一些用户抱怨连接失败.这些用户可能具有非常特殊的网络环境(例如,需要用户名/密码auth代理)并且直接连接不适用于他们.

有时虚拟用户配置错误,我想让wininet为我尝试"全部"可能的代理设置; 遗憾的是,INTERNET_OPEN_TYPE_PRECONFIG只会尝试用户配置的那个,而不是"每个可能的代理设置".

所以我的问题是,如何使一个程序具有最强大的能力来解决虚拟用户的所有http连接(特别是代理配置)(即,他们不了解如何配置他们的系统)?是否有任何建议的方式来建立HTTP连接而无需处理代理内容?(即,"超级"连接解算器将尝试所有可能的代理设置),或者是否有任何方法告诉WinINET启用其所有代理设置来创建连接?

proxy winapi wininet winhttp

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

我应该使用g_strncasecmp的instread?

看起来g_strncasecmp已被弃用,所以我正在寻找另一个函数来做同样的事情.

c glib

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

如何以模块化方式设计应用程序?

我正在寻找关于"如何以模块化方式设计应用程序"的指针,建议,链接,警告,想法甚至是轶事.我将在这个项目中使用python,但建议不一定要引用这种语言,尽管我只愿意实现基于OOP的设计.

这里有一些背景知道我来自哪里以及我想要实现的目标......


我的项目将是一个小型应用程序,它将使用Web服务并以各种方式显示结果,包括:

  • 通知弹出窗口仅包含调用的结果
  • 应用程序主窗口中的选项卡,其中包含从检索到的原始数据绘制的图形
  • 消息的缓冲区(在domand上可见),其中各种服务的结果将堆积起来

该应用程序将作为免费(语音)软件发布,因此我想让其他开发人员很容易编写插件/模块,这些插件/模块将扩展主应用程序的功能,而无需更改核心代码.

此时,插件本质上应该允许开发人员通过定义提供者,数据操作(如果有的话)以及将数据呈现给用户的方式来激活新的web服务.

我在使用drupal开发方面有丰富的经验,drupal具有强大的模块化方法,但也遵循非面向对象的设计,所以我怀疑对于python,drupal设计可能不是最佳解决方案.

如果这是至关重要的 - 核心将为GNU/Linux本地开发.

提前谢谢您的时间!

python oop design-patterns modularity software-design

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

MySQL是LIKE昂贵的SELECT?

以下问题是关于选择完全匹配(例如:INT)与与varchar"LIKE"匹配之间的速度.

有什么区别吗?我问这个的主要原因是因为我试图决定是否将ID从我当前的项目中删除.

例如,而不是:

http://mysite.com/article/391239/this-is-an-entry
Run Code Online (Sandbox Code Playgroud)

改成:

http://mysite.com/article/this-is-an-entry
Run Code Online (Sandbox Code Playgroud)

从长远来看,你认为我会遇到任何性能问题吗?我应该保留身份证吗?

注意:

我会使用LIKE让用户更容易记住.例如,如果他们写" http://mysite.com/article/this-is-an ",它将重定向到正确的.

关于页数,让我说我大约79,230和应用程序.正在快速增长.就像我们每天说1640个条目一样

mysql

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

ToolStrip内存泄漏

我在使用SWF-ToolStrip处理内存泄漏时遇到了麻烦。据此http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=115600#已解决。但是这里似乎没有。

有人知道如何解决这个问题吗?

c# memory memory-leaks toolstrip winforms

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

在Visual Studio中调试时我可以使用哪些"catch all"关键字 - 比如"this"?

再次,学习者在这里.

一般来说,我希望能够查看应用程序的整个状态,以了解我在当前范围内可以获得的信息.

我做了很多事情就是打开QuickWatch并进行评估this,它给了我当前课程中的所有内容.

我想知道是否有任何其他关键字我可以用来获得类似的东西,这将允许我询问应用程序状态的其他部分.比如,有没有办法看到另一个类里面的值?是否存在"全球"范围?

希望你能提供帮助,并希望我没有太模糊,因为我还在学习在C#环境中使用的正确术语.

在此先感谢您的帮助 :)

干杯

伊恩

c# debugging visual-studio-2008 visual-studio

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

为什么SQL Server Compact Studio中的服务器类型列表中缺少SQL Server Compact Edition?

我的PC上安装了"SQL Server Compact 3.5 Service Pack 1"和"SQL Server Management Studio 2008"(SSMS).过去,我可以从SSMS中"连接到服务器"对话框的"服务器类型"列表中选择"SQL Server Compact Edition".此条目现在丢失,我无法恢复它.

ssms sql-server-2008 sql-server-ce

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