1

私はこれを取得して回答するのに苦労しました。これについての助けを本当に、本当に感謝しています。

私はこれを2週間以上続けています。

C# を使用して amibroker に一連の株式データを追加したいのですが、C# でインスタンス化する方法に関する CLEAR 応答が見つかりません。

VB では、次のようにします。

Dim AmiBroker = CreateObject("Broker.Application")                
sSymbol = ArrayRow(0).ToUpper
Stock = AmiBroker.Stocks.Add(sSymbol)
iDate = ArrayRow(1).ToLower
quote = Stock.Quotations.Add(iDate)
quote.Open = CSng(ArrayRow(2))
quote.High = CSng(ArrayRow(3))
quote.Low = CSng(ArrayRow(4))
quote.Close = CSng(ArrayRow(5))
quote.Volume = CLng(ArrayRow(6))

問題は、この場合、CreateObject が C# で機能しないことです。

以下のコードをオンラインのどこかで見つけましたが、上記を達成する方法を理解できないようです。

Type objClassType; 
objClassType = Type.GetTypeFromProgID("Broker.Application");
// Instantiate AmiBroker
objApp = Activator.CreateInstance(objClassType);
objStocks = objApp.GetType().InvokeMember("Stocks", BindingFlags.GetProperty,null, objApp, null); 

誰でもここで私を助けることができますか?

ありがとう

4

2 に答える 2

0

VBコードは、「COMIDispatch」互換コンポーネントに対して遅延バインディングと呼ばれるものを使用します。遅延バインディングは、C#ではサポートされていません(C#バージョン3まで)。C#コンパイラは、バインド方法を知っているコードのみをコンパイルします(アーリーバインドと呼ばれます)。

やりたいことを行うには、Visual Studioを介してプロキシdllを生成する方が簡単です。プロジェクトで参照を追加を選択し、[ COM ]タブを選択して、リストでそのamiブローカーコンポーネントを検索します。これにより、VBで示したものと同様のコードを使用してプログラムできるプロキシdllが生成されます。

C#3.0では、Type.Missing論理的ではないと思われる場合でも、使用する必要がある場合や、追加の明示的なキャストを行う必要がある場合があります。

C#4.0には、と呼ばれるものdynamicがあります。これにより、COMコンポーネントにアクセスするときにはるかにクリーンなコードを記述できます。

于 2010-05-31T02:58:18.873 に答える