これは、記事
「アンマネージコードからの.Netクラスのクロスプラットフォーム使用」の続き
です。 または、LinuxのIDispatchカウンターパート 。
」そこで、アンマネージアプリケーションで.Netクラスを使用する機会を得ました。 次に、
「ネイティブAPIテクノロジーを使用したコンポーネントの作成」を使用します 。
それでは始めましょう。
まず、使用するクラスを定義します。
class LoaderCLR :public BaseNetObjectToNative { public:
それでは実装に移りましょう。 メインにのみ焦点を当てます
これらは基本的な方法です。 これで、1Cからコード呼び出しにアクセスできます。
最初に、変数とヘルパー関数を宣言します。
,; ()
そして今、1Cで.Netを使用するためのコードを作成できます。 そして、この刺激的な瞬間が来ました!
StringBuilder() =(.("System.Text.StringBuilder"," ")); CultureInfo=("System.Globalization.CultureInfo"); CultureInfoES=(.(CultureInfo.(),"es-ES")); (.Capacity); (.()); InvariantCulture=(CultureInfo.InvariantCulture);
すぐに、何らかの理由で1CはInvariantCultureプロパティを設定したいのですが、誰もそれを求めません。
Sat.Appendメソッド(「新しい文字列」)を呼び出すと、 プロシージャとして、1Cはまだ関数として呼び出し、.Net側では、解放したいリストに保存されます。
次に、より複雑な例を見てみましょう。
うわー、それは動作します!
サードパーティのライブラリをダウンロードできます。
=("TestDllForCoreClr., TestDllForCoreClr, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); =(.(.()," ")); (.); .=" 1"; (.); (.); .=(" 1"); (.); (.());
さて、悲しいことに進みましょう。
前の記事では、速度テストがあり、その呼び出し時間は1秒あたり300,000を超える呼び出しでした。
1Cについても同様のテストを実行します。
() ;
00:00:06.45 for .Net
00:00:01.20 1Cの場合
つまり、通話速度は1秒あたり30,000通話に低下しました。
しかし、それで十分です。通常、より難しいメソッドが呼び出されます。
IDynamicMetaObjectProviderをサポートするオブジェクトのサポートを追加しました
テストのために、ExpandoObjectを作成します
public object ExpandoObject() { dynamic res = new ExpandoObject(); res. = " ExpandoObject"; res. = 456; res. = (Func<string>)(() => res.); res. = (Func<int, int, int>)((x, y) => x + y); return res; }
そして、DynamicObjectの相続人
class TestDynamicObject : DynamicObject { public override bool TrySetMember(SetMemberBinder binder, object value) { return true; }
今、あなたは1Cで呼び出すことができます
=("TestDllForCoreClr., TestDllForCoreClr, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); =(.(.()," "));
さまざまなパーサーを使用する場合に便利です。
ジェネリックメソッドの型推論を追加
これで、メソッドを個別に表示することはできません
外部イベントをサポートしました
クラスで、Actionタイプ<string、string、string>のプレーヤーを作成します
public class { public Action<string, string, string> 1;
1Cで。
(, , )
そして、モジュール変数で設定することを忘れないでください
;
将来的には
、1C用の.NET(C#)の類似物を追加し
ます。 AddHandlerまたはHandlingExternal Eventsを介して1Cで.Netイベントを使用するためのラッパークラスの動的コンパイルここで、外部コンポーネントテクノロジーの1C実装の欠点について説明する価値があります。
1.メソッドFindMethod、FindProp、IsPropReadable、IsPropWritable、GetNParams、HasRetVal、GetParamDefValueは絶対に不要です。
メソッド以来
bool CallAsProc
bool CallAsFunc
bool SetPropValおよびbool GetPropValは成功時に戻り値を持ちます
エラー情報はAddErrorを介して返されます。
はい。インデックスの呼び出しは、IDiapatchからの時代錯誤であり、インターフェイスの説明がありました。
呼び出しの速度を上げるため。
2. SetPropValメソッドとGetPropValメソッドが戻るとき、例外は発生しません
3.何らかの理由で、コードでこれが必要でない場合、プロパティ設定が行われます。
4.メソッドは関数として呼び出され、メソッドはプロシージャとして呼び出されます。
5.主な理由の1つは、VCメソッドからVCのコピーを返して転送できないことです。
私は個人的に何の問題も見ていません。 このタイプの値を定義し、pInterfaceValフィールドにリンクを設定します。
参照カウントは1C側で発生します。 メソッド呼び出しの期間中のみ、1Cオブジェクトを含めて転送できます。
将来的には、1C
用の.NET(C#)の例に従って、1Cで.Netオブジェクトのイベントを使用する前に開発できます
。 AddHandlerまたはHandlingExternal Eventsを介して1Cで.Netイベントを使用するためのラッパークラスの動的コンパイル「1Cの.Net。非同期HTTP要求、複数のファイルを送信するマルチパート/フォームデータ、gzipを使用したトラフィック圧縮、deflate、サイトの便利な解析など」のような非同期呼び出しを使用します
。一般に、.Net統合はMicrosoft Dynamics AX
ClrObjectにあります。
クロスプラットフォームCore Clrを使用すると、1Cに統合できます。 これは、インポート代替としてのLinuxに特に当てはまります。
これまでのところ、Windows 7.10に取り組んでいます。 LinuxとIOSはまだありませんが、仮想マシンですぐに確認します。 .Net Core CLRは
ここからダウンロードでき
ます私が1Cを助けたいと思うこと。 1Cで.Netクラスを使用した経験は膨大です。
ソースとテストは
ここにあります 。