1999/09/09 - 小ネタ

同じ値の char 同士を比較したのに値が違う,と言われる。signed と unsigned を比較していた。

ILS2 DirectPlay のイベントスレッド,終了のためにイベントをもう 1 つ用意する。

while(1)
{
    // イベントを待つ
    HANDLE hHandles[2];
    hHandles[0] = m_hDPEvent;
    hHandles[1] = m_hDPKillEvent;
    if(::WaitForMultipleObjects(2, hHandles, FALSE, INFINITE) == WAIT_OBJECT_0 + 1)
    {
        // 終了イベント
        return;
    }
    else
    {
        処理
    }
}

のようにするとスッキリする。


VB から VC++ DLL を使う。VC++ で,MFC 拡張 DLL を作成し,

"func.h"
#ifdef __cplusplus
extern "C" {
#endif
int APIENTRY func();
#ifdef __cplusplus
}
#endif
"func.cpp"
int APIENTRY func()
{
    return 0;
}

で公開する関数を作成。この中からはクラスも呼び出せる。

次に def ファイル。

"library.def"
LIBRARY      "DialUpCommon"
DESCRIPTION  'DialUpCommon Windows Dynamic Link Library'

EXPORTS
    func=XXXXXXXX

XXXXXXXX の部分は内部名。@ がたくさん付いてるやつ。

VB 側

Private Declare Function func Lib "library.dll" () As Long

Private Sub Command1_Click()
func
End Sub

とする。その際,開発環境からは DLL をフルパスにするか,DLL をパスの通っている場所に置かなくてはダメだった。

コメントする