小编Mar*_*tin的帖子

使用本地用户帐户在Windows上进行基于PHP表单的身份验证

我正在运行PHP,Apache和Windows.我没有域设置,所以我希望我的网站基于表单的身份验证使用Windows内置的本地用户帐户数据库(我认为它称为SAM).

我知道如果设置了Active Directory,您可以使用PHP LDAP模块在脚本中进行连接和身份验证,但是如果没有AD,则没有LDAP.独立机器的等价物是什么?

php windows apache authentication sam

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

如何在C++中实现多个COM接口?

我试图理解这个关于浏览器帮助对象的示例代码.

在内部,作者实现了一个暴露多个接口的类(IObjectWithSite,IDispatch).

他的QueryInterface函数执行以下操作:

if(riid == IID_IUnknown) *ppv = static_cast<BHO*>(this);
else if(riid == IID_IObjectWithSite) *ppv = static_cast<IObjectWithSite*>(this);
else if (riid == IID_IDispatch) *ppv = static_cast<IDispatch*>(this);
Run Code Online (Sandbox Code Playgroud)

我从C角度了解到,接口指针只是VTables的指针.所以我认为C++能够使用static_cast返回任何已实现接口的VTable.

这是否意味着以这种方式构造的类在内存中有一堆VTable(IObjectWithSite,IDispatch等)?C++对不同接口上的名称冲突做了什么(它们各自都有QueryInterface,AddRef和Release函数),我可以为每个接口实现不同的方法吗?

c++ com static-cast multiple-interface-implem

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

三维点三角碰撞检测

如何在以下物理模拟中更正浮点错误:

  • 原点(x,y,z),
  • 施加力后所需的点(x',y',z').
  • 共享边缘BC的两个三角形(A,B,C)和(B,C,D)

我正在使用这种方法进行碰撞检测:

For each Triangle
    If the original point is in front of the current triangle, and the desired point is behind the desired triangle:
        Calculate the intersection point of the ray (original-desired) and the plane (triangle's normal).
        If the intersection point is inside the triangle edges (!)
            Respond to the collision.
        End If
    End If
Next Triangle
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,有时候该点落入浮点数学的灰色区域,它靠近BC线,以至于它不能与任何一个三角形碰撞,即使从技术上来说它应该总是与其中一个碰撞.他们有共同的优势.当发生这种情况时,该点在两个边共享三角形之间正好通过.我用(!)标记了一行代码,因为我相信这是我应该做出改变的地方.

在非常有限的情况下工作的一个想法是跳过边缘测试.有效地将三角形转换为平面.这只适用于我的网格是凸包的情况,但我计划创建凸形.

我专门使用点积和三角法线进行所有前后测试.

math 3d collision-detection

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

C++ new []进入基类指针在数组访问时崩溃

当我分配单个对象时,此代码工作正常.当我尝试添加数组语法时,会出现段错误.为什么是这样?我的目标是向外界隐瞒类c在内部使用b对象的事实.我已将程序发布到键盘供您使用.

#include <iostream>

using namespace std;

// file 1

class a
{
    public:
        virtual void m() { }
        virtual ~a() { }
};

// file 2

class b : public a
{
    int x;

    public:
        void m() { cout << "b!\n"; }
};

// file 3

class c : public a
{
    a *s;

    public:
        // PROBLEMATIC SECTION
        c() { s = new b[10]; } // s = new b;
        void m() { for(int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c++ arrays polymorphism inheritance

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

在C++中将HWND包装在对象中的有效方法是什么?

我一直在使用C++和Win32(非MFC/ATL)我正在编写自己的类库来包装某些Win32对象(特别是HWND).

在创建窗口时,我发现"RegisterClassEx/CreateWindowEx"方法非常笨拙.这种设计使得编写简单的类包装器变得困难(必须采用thunk,或TLS或其他一些复杂的机制).

在我看来,让应用程序在窗口创建时指定窗口过程和用户​​数据指针会更简单.

这里的设计选择是否有任何明显的原因?有一种非常简单有效的方法吗?

c++ winapi

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

如何在Internet Explorer中自动执行链接

我正在尝试创建一个通过Web打印文档的应用程序.我创建了我的文档,并创建了一个带有元刷新标记的网页,其中包含以下内容:

<meta http-equiv="refresh" content="3;http://example.com/download.epl2" />
Run Code Online (Sandbox Code Playgroud)

我指定该文档具有内容类型的application/x-epl2,并且我在我的计算机上使用一个程序将相关的.epl2文件静默地发送到打印机.

我已将该网站放入我信任的站点区域.

目前Internet Explorer弹出"打开,保存,取消"对话框,没有自动打开文件的选项.

IE6/7/8中是否有设置可以让IE只是在没有提示的情况下打开文件?

编辑

文件的实际内容将根据作业而有所不同,但实际上它是遵循Eltron编程语言的文本.

编辑

我已经在Chrome和Firefox中完成了这项工作,选择"从现在开始自动打开此类型的文件"

编辑

这个程序将被使用的机器将实际上是仅限于从他们的网络浏览器访问我的网站的信息亭,所以我不担心流氓网站将文件发送到我的打印机.

编辑

我使用PHP在服务器端生成文档和HTML,但我希望解决方案与语言无关.

printing internet-explorer

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

为什么我的文件输出有问题?

我有一个简单的程序,我在MinGW和Visual C++ 2008 Express中编译,并且都提供大于88200的输出文件.当我设置s = 0时,两个程序都按预期工作.我究竟做错了什么?

#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    int i;
    short s;

    fstream f;

    f.open("test.raw", ios_base::out);

    for(i = 0; i < 44100; i++)
    {
        s = i & 0xFFFF; // PROBLEM?
        f.write(reinterpret_cast<const char *>(&s), sizeof(s));
    }

    f.close();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ int fstream short

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

如何在调用系统后启用ctrl-c/ctrl + break?

我编写了一个从内部调用系统命令的程序:

#include <stdlib.h>

int main(void)
{
    while(1)
    {
        system("ls 2>&1 1>/dev/null"); // comment this line out to enable ctrl+break
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当它运行时,CTRL + C和CTRL + BREAK不再起作用,似乎被忽略.

我正在尝试编写一个程序,在后台执行一些涉及shell的操作,但我也希望能够在用户想要破解时突破程序.

有没有办法让它按我想要的方式工作?我应该改变架构来执行某种fork/exec吗?

c unix linux shell system

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

如何在VS2010 Express中独立发布静态库Release/Debug?

我正在编写应用程序并链接SDL和OpenGL.在我的代码中,我有以下几行:

#pragma comment(lib, "sdl.lib")
#pragma comment(lib, "sdlmain.lib")
#pragma comment(lib, "opengl.lib")
Run Code Online (Sandbox Code Playgroud)

这仅适用于发布模式.在调试模式下,我收到以下链接器错误:

libcmt.lib(invarg.obj) : error LNK2005: __initp_misc_invarg already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __call_reportfault already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __get_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: "void __cdecl _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invoke_watson@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) …
Run Code Online (Sandbox Code Playgroud)

c++ opengl linker sdl visual-studio-2010

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

什么时候更改数据库后端?

在存储Web应用程序数据以了解应该使用哪个数据库后端时,是否遵循一般的经验法则?是选择时我应该考虑的每日点击次数,数据行数或其他指标吗?

我最初的想法是,这个顺序看起来像下面这样(但不一定,这就是为什么我问这个问题).

  1. 平面文件
  2. BDB
  3. SQLite的
  4. MySQL的
  5. PostgreSQL的
  6. SQL Server
  7. 神谕

database backend

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

Wix RegistryKey权限

我正在尝试安装只应由某些用户访问的注册表项.安装程序的每个其他部分都可以工作(它安装服务并注册组件).这是片段.

<Component Id="cmpXXX" Guid="{YYY}">
    <RegistryKey Root="HKLM" Key="Software\ZZZ" Action="createAndRemoveOnUninstall">
        <RegistryKey Key="Machine" Action="createAndRemoveOnUninstall">
            <Permission User="Administrators" GenericAll="yes" />
            <RegistryValue Type="string" Name="ID" Value="SecretID" />
            <RegistryValue Type="string" Name="Key" Value="SecretKey" />
        </RegistryKey>
    </RegistryKey>
</Component>
Run Code Online (Sandbox Code Playgroud)

安装程序完成后,所有用户都可以读取密钥(而不仅仅是管理员).我要安装的命令行是这样的:

msiexec /i installer.msi /l*v installlog.txt
Run Code Online (Sandbox Code Playgroud)

日志没有说明权限.当我在Orca中打开数据库时,LockPermissions表显示权限行,它看起来很好.

我究竟做错了什么?

security registry permissions wix wix3

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

如何检测主线程的窗口破坏?

通常,"主"窗口类的窗口过程将调用PostQuitMessage以响应WM_DESTROY消息.

我希望主线程根据它创建的窗口的生命周期决定何时终止.这样,无论我选择哪个窗口类作为主窗口,都可以有一个没有PostQuitMessage的通用窗口过程.

while(GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);

    if(msg.hwnd == hWnd && msg.message == WM_DESTROY)
    {
        PostQuitMessage(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

以上是我的尝试,但WM_DESTROY消息从未发布到消息队列,它似乎是窗口过程的内部.

有没有办法实现这个目标?

windows winapi

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

一个安全的蓄电池真的这么复杂吗?

我正在尝试编写一个在不受约束的输入下表现良好的累加器.这似乎不是微不足道的,需要一些非常严格的计划.这真的很难吗?

int naive_accumulator(unsigned int max,
                      unsigned int *accumulator,
                      unsigned int amount) {
    if(*accumulator + amount >= max) {
        return 1; // could overflow
    }

    *accumulator += max; // could overflow

    return 0;
}

int safe_accumulator(unsigned int max,
                     unsigned int *accumulator,
                     unsigned int amount) {
    // if amount >= max, then certainly *accumulator + amount >= max
    if(amount >= max) {
        return 1;
    }

    // based on the comparison above, max - amount is defined
    // but *accumulator + amount might …
Run Code Online (Sandbox Code Playgroud)

c c++ integer-overflow undefined-behavior

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