HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1228
AsCOMオブジェクトで 複数の同じ名前のメソッドがあった場合 どちらか一方を選択する方法7解決


As

リンク

2006/12/28(Thu) 10:51:06|NO.4445

COMをつかったプログラム作成段階で同じメソッドが定義されているインターフェースがあり
VBでは****(2)とさえすればできるようなのですが、HSPの場合だと

   「*無効な名前がパラメータに設定されています」

となり選択することができません。これを解決できる方法よろしくお願いいたします><



この記事に返信する


kz3

リンク

2006/12/28(Thu) 12:22:47|NO.4447

>VBでは****(2)とさえすればできるようなのですが、HSPの場合だと

それはメソッドではなくプロパティではないですか?
プロパティなら

object(property,arg)
のように書きます。
ちょっと伏字部分がどんな内容なのか分からないのでこのレスだけで解決できないかも知れませんが...



kz3

リンク

2006/12/28(Thu) 12:36:05|NO.4448

えっと、参考になるか分かりませんが、HSP開発wikiのCOMDictionaryなどはどうでしょうか。
(http://hspwiki.nm.land.to/?COMDictionary)
COM関連初投稿ということだったので、メソッドの書き方・プロパティの書き方は解説しています。

あと、単にメソッドが引数を必要としているだけなら、mcallの説明を読めば済むと思います。



As

リンク

2006/12/28(Thu) 17:50:21|NO.4469

自前で文献つくってみました。
http://space.geocities.jp/pa_003_a/msnapi.html
IMessengerというインターフェースのバージョンによって変わってくると思いますが
IMessenger3のプロパティ&メソッドです。

>>それはメソッドではなくプロパティではないですか?
メソッドとプロパティの二つがあるのをすっかり忘れていました^^;
ですがここはあまり関係のないような気がします。
プロパティ(object(property,arg))に入れ替えて実行してみましたが、今度は*****(2)という名称にしなくても
エラーがでるようになりました。多分…メソッドとプロパティが同じ名前なんでしょうね^^;


↓もともと私がやりたいことはこれです。
http://hail2u.net/blog/coding/change-msn-messenger-display-picture-by-vbscript.html



kz3

リンク

2006/12/28(Thu) 20:12:59|NO.4476

素人的な回答で申し訳ありませんが、MSN Messenger(ver 7.5)でサインイン中に以下のスクリプトを実行したところ、自分の画像(?)を変更できましたよ^^;

newcom msg, "Messenger.UIAutomation.1" msg("MyProperty",2) = dir_exe+"\\sample\\demo\\hsp3scr.jpg" ; イメージの設定 //おまけ name = msg("MySigninName") ; サインイン名の取得 img = msg("MyProperty",2) ; 現在イメージのパスの取得



As

リンク

2006/12/29(Fri) 17:38:08|NO.4504

素人的な回答というか…もうずばり答えをさりげなくかいちゃってますね^^;

msg("MyProperty",2)           ↑VBの場合は MyProperty(2)

このように****(2)がHSPでは適切ではないため、どうすればいいのか悩んでいたところでした。
メソッドのほうはどうすればいいのかまだわかりませんが^^;
うまく実行させることができました^ー^
ありがとうございます。



kz3

リンク

2006/12/29(Fri) 19:11:34|NO.4513

>メソッドのほうはどうすればいいのかまだわかりませんが^^;

ここでいう「メソッド」とはどのことでしょうか?^^;

>多分…メソッドとプロパティが同じ名前なんでしょうね^^;
>VARIANT MyProperty(MCONTACTPROPERTY MyProperty) propget
>void MyProperty(MCONTACTPROPERTY MyProperty, VARIANT ePropType) propput

Asさんが作った文献のもととなったSDKがあると思って探してみましたが、それらしいものは入手できませんでした。
恐らくこれらはC++で使用するプロトタイプか何かだと思います。(C++は全く分かりません)
# MSDNのそれらしいリファレンスはhttp://msdn2.microsoft.com/en-us/library/ms630960.aspxを見つけましたが...ちょっと違う?

C++だと同名の関数を定義できるということを思い出しました。
恐らく引用した二つの関数は読取り用の関数と書込み用の関数が定義されているんだと思います。
# 横っちょにpropうんたらって書いてありますよね。
# propget = Property Get = 取得?
# propput = Property Put = 設定?

C++だと、『関数名(引数) = 値;』のような書き方は出来ませんから、上の二つの関数は、
・読取り『関数名(引数);』
・書込み『関数名(引数, 値);』
というように使うことを示していると思います。

よって、

>VARIANT MyProperty(MCONTACTPROPERTY MyProperty) propget

v = object("MyProperty", MyProperty) ; 取得

>>void MyProperty(MCONTACTPROPERTY MyProperty, VARIANT ePropType) propput

object("MyProperty", MyProperty ) = ePropType ; 設定

に相当すると思います。
文献に書かれている関数の横に prop*** と書かれているものはプロパティで、それ以外がメソッドだと思います。



As

リンク

2006/12/29(Fri) 23:11:12|NO.4520

つまり全てプロパティで同じ名前のプロパティが複数定義されていたということだったのですね。
それで2番目に定義されている同じ名前のプロパティを指定しようとおもっても一番目ばかり
取得されてしまってこのようになったと^^;

メソッドというのは プロパティではなくメソッドが複数定義されていたらどう取得するのだろう…
という安易な考えです^^;

MyProperty(2) というのはオーバーロードという同じクラス上で複数のメソッドまたは
プロパティを使うための方法らしいです。

これがHSPの場合は
img = msg("MyProperty",2)
だったようですが、どこにも載っていないと…
参考:http://msdn2.microsoft.com/ja-jp/library/se6z814t(VS.80).aspx




#MSDNで公開されているものは少し古いらしくMyPropertyという値は未来のために予約されている
と表記されていましたorz



ONION software Copyright 1997-2023(c) All rights reserved.