// (This is where you could get CLR managers) ICLRControl *pCLRControl; hr = pHost->GetCLRControl(&pCLRControl); assert(SUCCEEDED(hr));
// must get this stuff before the CLR is started ICLRGCManager *pCLRGCManager; hr = pCLRControl->GetCLRManager(IID_ICLRGCManager, (VOID **)&pCLRGCManager); //wprintf(L"\n%d\n",hr); assert(SUCCEEDED(hr));// ICLRAssemblyIdentityManager* pCLRAssemblyIdentityManager; // hr = pCLRControl->GetCLRManager(IID_ICLRAssemblyIdentityManager, (VOID **)&pCLRAssemblyIdentityManager); // assert(SUCCEEDED(hr)); //ClrCreateManagedInstance
Hi lunat:不好意思,我最个新手,还是看图说话,把第一张图片CMD中的100传到第二张图片窗口中的TextBox,咋弄
看来她要码子, 运行 test 100using System; using System.Drawing; using System.Windows.Forms;// csc /t:winexe namespace demo { class program { static void Main(string[] args) { Form frm = new Form(); TextBox textBox = new TextBox(); textBox.Location = new Point(2,2); textBox.Width = 200; if (args.Length > 0) textBox.Text = args[0];
}
如果是运行c#的程序的 在c#的Program.cs里面 把Main函数改一下
改成
static void Main(params string[] args)
{
//...
}假设生成 csapp.exe 运行的时候 csapp.exe serialNum1 serialNum2 serialNum3 ...
则在c#里面的args就能看到serialNum1 serialNum2 ...
#include "assert.h"
#include <mscoree.h>
#import <mscorlib.tlb> raw_interfaces_only rename("ReportEvent","ReportEventManaged") //high_property_prefixes("_get","_put","_putref")
using namespace mscorlib;int main()
{
HRESULT hr;
wchar_t buffer[60];
ICLRRuntimeHost *pHost = NULL;
::MessageBoxW(0, L"begin", L"begin", 0);
hr = CorBindToRuntimeEx(L"v2.0.50727",L"wks",0 //STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN | STARTUP_CONCURRENT_GC
,CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (void **)&pHost);
if (SUCCEEDED(hr))
::MessageBoxW(0, L"binded", L"yes", 0);
else
::MessageBoxW(0, L"no", L"no", 0);
DWORD domainId;
hr = pHost->GetCurrentAppDomainId(&domainId);
_itow(domainId, buffer, 10);
::MessageBoxW(0, buffer, L"yes", 0);
// (This is where you could get CLR managers)
ICLRControl *pCLRControl;
hr = pHost->GetCLRControl(&pCLRControl);
assert(SUCCEEDED(hr));
// must get this stuff before the CLR is started
ICLRGCManager *pCLRGCManager;
hr = pCLRControl->GetCLRManager(IID_ICLRGCManager, (VOID **)&pCLRGCManager);
//wprintf(L"\n%d\n",hr);
assert(SUCCEEDED(hr));// ICLRAssemblyIdentityManager* pCLRAssemblyIdentityManager;
// hr = pCLRControl->GetCLRManager(IID_ICLRAssemblyIdentityManager, (VOID **)&pCLRAssemblyIdentityManager);
// assert(SUCCEEDED(hr));
//ClrCreateManagedInstance
hr = pHost->Start();
if (SUCCEEDED(hr))
::MessageBoxW(0, L"started", L"yes", 0);
else
::MessageBoxW(0, L"no", L"no", 0);
DWORD retVal;
hr = pHost->ExecuteInDefaultAppDomain(L"D:\\testDll.dll",
L"testDll.Class1",
L"showBox",
L"hello world!",
&retVal); if (SUCCEEDED(hr))
::MessageBoxW(0, L"yew", L"yes", 0);
else
::MessageBoxW(0, L"no", L"no", 0); pHost->Stop(); exit(0);
}
//修改c#的Program.cs里面的Main函数
static void Main(params string[] args)
{
//...
//...其余不变
Application.Run(new Form1(args));
}
//...
//在Form1里面 添加
public Form1(params string[] args)
{
//...
//args就是命令行参数了
}
using System.Drawing;
using System.Windows.Forms;// csc /t:winexe
namespace demo
{
class program
{
static void Main(string[] args)
{
Form frm = new Form();
TextBox textBox = new TextBox();
textBox.Location = new Point(2,2);
textBox.Width = 200;
if (args.Length > 0)
textBox.Text = args[0];
frm.Controls.Add(textBox);
Application.Run(frm);
}
};
}
//修改c#的Program.cs里面的Main函数
static void Main(params string[] args)
{
//...
//...其余不变
Application.Run(new Form1(args));
}
//...
//在Form1里面 添加
public Form1(params string[] args)
{
//...
//args就是命令行参数了
textBox1.Text = String.Join(" ",args);
}