简而言之:我想监视从应用程序到DLL的选定调用.
我们有一个旧的VB6应用程序,我们丢失了源代码(该公司当时没有使用源代码控制..).此应用程序使用第三方DLL.
我想在新的C++应用程序中使用此DLL.不幸的是,DLL API只是部分记录,所以我不知道如何调用某些函数.我有功能签名.
由于VB6应用程序使用此DLL,我想看看它如何调用多个函数.到目前为止,我已经尝试或看过 -
struct模块在Python中进行许多转换,因为大多数函数使用指针传递值.由于我只需要记录函数参数,我想要一个简单的解决方案.有没有自动化工具,我可以告诉哪些功能要监控和签名,然后获取详细的日志文件?
我想在不使用QT的项目中使用信号/插槽库.我有很基本的要求:
我已经阅读了libsigc ++和Boost.Signals之间的比较.我还读到Boost.Signals的性能不佳.但是,我知道还有其他库,我仍然不确定应该选择哪个库.
有信号/插槽库的建议吗?
我有一个现有的独立应用程序,它将由第三方使用网络协议进行扩展.功能已经实现,我需要的只是将它们暴露给外部.
假设已经选择了传输协议(UDP),是否有任何资源可以帮助我设计我的应用程序协议?
似乎有很多关于软件设计的信息,但没有关于协议设计的信息.我已经看过应用程序协议设计了.
我正在查看使用着色器的OpenGL应用程序的来源.一个特殊的着色器看起来像这样:
uniform float someConstantValue;
void main()
{
// Use someConstantValue
}
Run Code Online (Sandbox Code Playgroud)
统一是从代码设置一次,并且在整个应用程序运行时都不会更改.
在什么情况下我想宣布someConstantValue为a uniform而不是const float?
编辑: 只是为了澄清,常数值是物理常数.
在我的应用程序中,有10-20个类被实例化一次[*].这是一个例子:
class SomeOtherManager;
class SomeManagerClass {
public:
SomeManagerClass(SomeOtherManager*);
virtual void someMethod1();
virtual void someMethod2();
};
Run Code Online (Sandbox Code Playgroud)
类的实例包含在一个对象中:
class TheManager {
public:
virtual SomeManagerClass* someManagerClass() const;
virtual SomeOtherManager* someOtherManager() const;
/** More objects... up to 10-20 */
};
Run Code Online (Sandbox Code Playgroud)
目前,TheManager使用new运算符来创建对象.
我的目的是能够使用插件替换SomeManagerClass(或任何其他类)实现与另一个.为了取代实施,需要两个步骤:
我想我需要某种对象工厂,但它应该相当简单,因为总是只有一种类型要创建(默认实现或用户实现).
有关如何设计像我刚刚描述的简单工厂的想法吗?考虑到将来可能会有更多类的事实,因此应该很容易扩展.
[*]我不在乎它是否不止一次发生.
编辑:请注意,TheManager中包含两个以上的对象.
我正在使用由同一供应商生产的两个商业库,名为VendorLibA和VendorLibB.这些库分布了许多依赖于编译器版本的DLL(例如VC7,VC8).两个库都依赖于另一个库,由该供应商生成,名为VendorLibUtils并包含在一个DLL中.
问题:VendorLibA使用与VendorLibB不同的VendorLibUtils版本.这两个版本不是二进制兼容的,即使它们是使用错误的版本也是一个坏主意.
有什么方法可以在同一个过程中使用这两个库吗?
注意: LoadLibrary无法解决此问题,因为我的进程不是导入VendorLibUtils的进程.
编辑:忘了提到显而易见的,我没有任何商业图书馆的源代码,可能我永远不会(感叹).
编辑:替代btw,是这样做:如何在Windows中组合GUI应用程序
我正在寻找一个可以执行以下操作的Windows工具(或一组工具):
我已经有1和2,但我找不到工具3.
为了捕获我可以使用Wireshark,用于回放Colasoft Packet Player,但我找不到改变数据包发送到的主机的方法.
该工具应适用于Windows XP SP2/3.
我有一个非线程安全的类:
class Foo {
/* Abstract base class, code which is not thread safe */
};
Run Code Online (Sandbox Code Playgroud)
此外,如果你有foo1和foo2对象,你不能调用foo1-> someFunc()直到foo2-> anotherFunc()返回(这可能发生在两个线程).这是情况,它无法更改(Foo子类实际上是python脚本的包装器).
为了防止不必要的电话,我创建了以下内容 -
class FooWrapper {
public:
FooWrapper(Foo* foo, FooWrappersMutex* mutex);
/* Wrapped functions from Foo */
};
Run Code Online (Sandbox Code Playgroud)
在内部,FooWrapper使用共享互斥锁包装对Foo函数的调用.
我想测试FooWrapper的线程安全性.我最大的问题是线程是由操作系统管理的,这意味着我对执行的控制较少.我想测试的是以下场景:
什么是最简单的自动测试这样的场景?
我在Win32上使用QT,虽然我更喜欢QT至少是跨平台的解决方案.
我正在为Windows XP开发OpenGL应用程序.目标机器有2块NVIDIA GeForce 9800GT显卡,这是需要的,因为应用程序需要输出2个模拟视频流.
应用程序本身有两个OpenGL窗口,每个视频卡一个.每个视频卡都连接到一台显示器.至于代码,它基于一个最小的OpenGL示例.
如何知道应用程序是否同时使用两个视频卡进行渲染?
目前,我不关心应用程序是仅在Windows XP上运行还是仅在NVIDIA显卡上运行,我只需要知道这两种应用程序是如何运行的.
在Linux上,我正在尝试将stdout从控制台应用程序重定向到文件而不是控制台.我没有源代码.我尝试了几种方法,但都导致了一个空文件.没有输出重定向一切正常(我看到控制台消息).
我试过,例如:
progname > out.txt
progname > out.txt 2&>1
Run Code Online (Sandbox Code Playgroud)
并没有出现在out.txt和控制台中.
我试着用strace运行应用程序.当我不使用重定向时,我看到如下的行 -
write(1, "bla bla", 8)
Run Code Online (Sandbox Code Playgroud)
当我引入输出重定向时,根本就没有写入调用,这使我认为应用程序在编写消息之前正在测试某些内容.应用程序在寻找什么?我怎么能绕过它呢?
我正在使用CentOS 5.5和Bash.