mcrblog

vcpp-ml

1999年02月

23

[vcpp 00026408] Re: コマンドラインについて

Makoto さん、みなさん、
      こんにちは。tomO です。

        Tue, 23 Feb 1999 18:52:55 +0900 の
        [vcpp 00026404] コマンドラインについて
        のメールに関してですが....

》API関数のGetCommandLine()を使いたいのですが、
》下記InitInstance()関数ではコマンドラインを解析しているので、
》例えば
》 c:\test\test exe abc 10
》と実行すると
》『c:\test\abcは見つかりません。』
》とメッセージが出てしまいます。
》また
》ParseCommandLine(cmdInfo);
》if (!ProcessShellCommand(cmdInfo))
》return FALSE;
》を消去すると、次のShowWindow関数で
》thisポインタがヌルのため、エラーが起きてしまいます。

》これらを回避するにはどのような方法があるのでしょうか?
CCommandLineInfoをオーバーライドして、
void CCoreCommandLineInfo::ParseParam
をインプリメントします。

------------------------------------------------------------
いつも笑顔で
tom(^^)O
mailto:o...@alpha.club.or.jp
23

[vcpp 00026407] Automation と SafeArray について

はじめまして。
早速ですがよろしくお願いいたします。

あるローカルプロセスをAutomationを使ってコントロール
したいと思っております。

Visual C++ 機能を使ってタイプライブラリからそのプロセス
ラッパークラスを作成したのですが,ある関数のみ下記のよう
になり作成されませんでした。

   メソッド 'GetImage' は戻り値の型またはパラメータ
   型が無効なため表示できません。


タイプライブラリは下記のようになっています。

    [id(0x81150001), helpstring("Get image")]
    HRESULT _stdcall GetImage(
                    [in, out] SAFEARRAY(single)* ftBuff, 
                    [in] short BuffSize, 
                    [out, retval] short*);


そこで下記のような関数をラッパークラスに追加しました。
( CXXX は COleDispatchDriver の派生クラスです )

  short CXXXX::GetImage(float* ftBuff, short BuffSize)
  {
    HRESULT         hr;
    VARIANT         vt;
    short           result;
    SAFEARRAY FAR*  psa;
    SAFEARRAYBOUND  rgsabound[1];
    static BYTE     parms[] = VTS_VARIANT VTS_I2;

    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = BuffSize;
    psa = SafeArrayCreate(VT_R4, 1, rgsabound);
    vt.vt  = VT_ARRAY | VT_R4; 
    vt.parray = psa;

    InvokeHelper(0x81150001, DISPATCH_METHOD, 
        VT_I2, (void*)&result, params, &vt, nBuffSize);

    hr = SafeArrayLock(psa);
    if(SUCCEED(hr)){
        for(int n = 0; n < BuffSize; n++){
            SafeArrayGetElement(psa, &n, &ftBuff[n]);
        }
        SafeArrayUnlock(psa);
    }

    SafeArrayDestroy(psa);
  }

  ※この関数は引数のアドレス(配列)に値を設定するものです

上記のようにするとエラーなく実行されるのですが,配列に
値が設定されません。その他の Visual C++ が作成した関数は
正常に実行されます。ちなみに,VB で下記のように実行すると
正常に配列に値が設定されます。

    Dim iBuffSize As Integer
    iBuffSize = 320;
    ReDim ftBuffer(0 To iBuffSize) As Single
    i = SampleApp.GetImage(ftBuffer(), iBuffSize)

過去ログにも同様の質問がありましたが解決に至っておりません。
なにかアドバイスがありましたらよろしくお願いいたします。
--
23

[vcpp 00026406] Re: コマンドラインについて

こんにちは。林と申します。

> これらを回避するにはどのような方法があるのでしょうか?
> どなたかご教授ください。

CCommandLineInfoを派生して、メンバーのParseParamをオーバーライドして
自分の好きなように直してしまうというのはどうでしょうか?

-- 
共同テクニクス株式会社 システム開発1部
林 真市 Shinichi Hayashi
出向先: h...@mictokyo.co.jp
個人  : h...@fsinet.or.jp
23

[vcpp 00026405] Re: About STL (Was: Re: メモリの開放について)

西代@クォークです。

[επιστημηさんのコメント]

>JavaによるSTLの実装ともいえるJGLなんかではinterfaceを定義してて、
>かならずそいつをimplementsせんならんのでそこいらへんははっきりしてますな。
># templateないからコンテナの要素はみぃんなObject。
># 使うたんびにキャストかまさんならん。フラストレーションたまります^^;

JDK1.2のコンテナライブラリのドキュメントに、
 「この辺が辛いので、Javaにもtemplate(汎型)のような機能を言語に追加する事を
決めた」
とあります。
まだ実装されて無いみたいですが……(^_^;

----------------------------------------
株式会社クォーク
技術部情報開発グループ
西代健児
mailto:m...@quark-jp.co.jp
----------------------------------------
23

[vcpp 00026404] コマンドラインについて

中村ともうします。

SDIベースでMFCスケルトンを作成しています。
起動時にコマンドラインから2つの引数を取るアプリを
作成したいのですが(C言語のmain(char *c, int a)
みたいにです)
API関数のGetCommandLine()を使いたいのですが、
下記InitInstance()関数ではコマンドラインを解析しているので、
例えば
 c:\test\test exe abc 10
と実行すると
『c:\test\abcは見つかりません。』
とメッセージが出てしまいます。
また
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
を消去すると、次のShowWindow関数で
thisポインタがヌルのため、エラーが起きてしまいます。

これらを回避するにはどのような方法があるのでしょうか?
どなたかご教授ください。


BOOL CTestApp::InitInstance()
{
 :
 :
// DDE、file open など標準のシェル コマンドのコマンドラインを解析します。
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// コマンドラインでディスパッチ コマンドを指定します。
if (!ProcessShellCommand(cmdInfo))
return FALSE;

// メイン ウィンドウが初期化されたので、表示と更新を行います。
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

return TRUE;
}
&--------------------------------------------&
  中村  n...@ccsd.abk.nec.co.jp
&--------------------------------------------&
記事検索
Amazon.co.jp
  • ライブドアブログ