C#调用外部exe作为子窗体或UI? VC++如何实现呢呢?...札记plus
2013-04-17 15:08
393 查看
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); System.Diagnostics.Process p = System.Diagnostics.Process.Start(@"C:\tmp\Soong.exe"); p.WaitForInputIdle(); SetParent(p.MainWindowHandle, this.Handle); ShowWindowAsync(p.MainWindowHandle, 3); } [DllImport("user32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); } }
如果是VC++,如何实现上述功能呢?
道理是一样的:
1,开启线程,获取其窗口句柄
2,设置其父窗口
3,设置窗口样式,去掉标题栏和菜单栏
4,调整窗口,使看起来是一个窗口
5,OnSize重写,调整父窗口时,子窗口跟着相应调整
POCO C++库在Windows上使用VS2010编译的方法:
1 下载POCO库:http://pocoproject.org/download/index.html2 解压在解压目录内写一个后缀名为cmd的空文本文件,编写命令行内容:
@echo off
if defined VS100COMNTOOLS (
call "%VS100COMNTOOLS%\vsvars32.bat")
buildwin 100 build static_mt both Win32 nosamples devenv
3 运行该文件,即可编译
OpenSSL在WIN平台上上通过Perl使用VS2010编译
1.下载最新版本的Perl
2.下载 latest openssl并解压到C:\
参考openssl目录下的install.win32说明进行安装:
1、进入解压目录。
>cd C:\openssl-0.9.8k
2、运行Configure。
>perl Configure VC-WIN32–prefix=C:\openssl-0.9.8k”(注意大小写区分),
如不成功会有明显提示。
3、创建Makefile文件。
>ms\do_ms
推荐使用这种方式,另外两种方式如果使用也必须保证本机有编译器才能使用。
:ms\do_masm(默认vc自带的编译器;也也以自己下载安装)
:ms\do_nasm(需要自己下载)
4、配置VC环境变量。很重要
>cd C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools
>vcvars32.bat
5、编译动态链接库。
>cd C:\openssl-0.9.8k
>nmake -f ms\ntdll.mak
如果编译成功,最后的输出都在out32dll目录下:包括可执行文件、两个dll(ssleay32.lib,
libeay32.lib)和两个lib文件(ssleay32.dll, libeay32.dll)。
6、为VC添加头文件和静态链接库路径。
ToolsàOptionsàDirectores,在Include
files中增加C:\openssl-0.9.8k \inc32目录;在Libray files中增加C:\openssl-0.9.8k\out32dll。
7、编写OpenSSL程序,可参考C:\openssl-0.9.8k\demos
(1)包含相应头文件
#include<openssl/***.h>
(2)添加静态链接库
#pragmacomment(lib,"libeay32.lib")
#pragmacomment(lib,"ssleay32.lib")
或ProjectàSettingsàLinkàObject\library
modules填写libeay32.lib ssleay32.lib。
(3)将动态链接库ssleay32.dll,
libeay32.dll复制到C:\WINDOWS\system32或Debug目录下,确保动态链接库在正确的路径。
C++分词一例
#include < iostream >#include < sstream >
#include < string >
#include < iterator >
#include < numeric>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::istringstream;
using std::istream_iterator;
void _tmain(int argc, _TCHAR* argv[])
{
string data("2.4 2.5 3.6 2.1 6.7 6.8 94 95 1.1 1.4 32");
istringstream input(data);
istream_iterator < double > begin(input), end;
cout << "The sum of the values from the data string is "<< std::accumulate(begin, end, 0.0) << endl;
}
Python导入包
如下图,想在Main.py中导入包Soong的Material类Main.py源码:
__author__ = 'Proteus' from Soong import * from Phy import * mtrl=MaterialDef.Material() mtrl.Cp=31 print mtrl.Cp node=Node1D.Node1D() node.mtrl=mtrl node.mtrl.rho=7010 print node.mtrl.rho
__init__.py中代码如下:
__author__ = 'Proteus'
__all__ = ['MaterialDef']
__init__.py是个很重要的文件,导入包会执行其中脚本。当其为空文件时,编译器执行语句“from Soong import *”时会问说:
Traceback (most recent call last):
File "D:/PycharmProjects/pyDemo/Main.py", line 5, in <module>
mtrl=MaterialDef.Material()
NameError: name 'MaterialDef' is not defined
MaterialDef.py中Material类的定义如下:
class Material:
def __init__(self,name="Steel",rho=7200,Cp=680,lmd=34):
self.name=name
self.rho=rho
self.Cp=Cp
self.lmd=lmd
def GetH(self,T,T0):
return self.Cp*(T-T0)
def ToString(self):
return self.name想在Phy包中引用Soong包中的Material类则在Node1D文件中导入MaterialDef包:
__author__ = 'Proteus' from Soong import * class Node1D: def __init__(self,x=0,T=1550,T0=1550,Vol=1): self.x=0 self.T=1550 self.T0=1550 self.Vol=1 self.mtrl=MaterialDef.Material() def Update(self): self.T0=self.T
Python逐行读取文本文件并去掉换行符
早就听说Python是干大事的,小事情是不屑于做的,今天领教了,RT:FileOrigin=open("AS3Syntax.txt") FileConverted=open("AS3SyntaxList.txt",'w') lineNo=0 for line in FileOrigin: lineNo+=1 print(lineNo) ln=line.strip(); ln.replace('\n','') ln="\""+ln+"\",\n" print(ln) FileConverted.write(ln) FileOrigin.close() FileConverted.close() print("done..")
相关文章推荐
- c#的winform调用外部exe作为子窗体
- C#Winform调用外部exe作为子窗体
- C#Winform调用外部exe作为子窗体
- C#如何调用外部exe程序
- [转载]C#如何实现对外部程序的动态调用
- C#如何调用外部exe程序
- C#.NET dll封装(包含UI和实现函数),通过反射调用dll实现控件的快速加载(PrimPointList.cs)
- C#如何调用外部的exe文件
- C#做窗体应用程序时,对excel涉及的背景色设置,边框设置,数据如何导入等的实现
- C#使用Process类调用外部exe程序
- C#通过委托和异步调用实现窗体间的通讯
- c# 如何调用非托管函数3-实现回调函数
- C#调用执行外部程序的实现方法
- C#调用API 实现窗体总在最上
- c#中如何跨线程调用windows窗体控件?
- 通过分析exevc系统调用处理过程来理解Linux内核如何装载和启动一个可执行程序
- C#.NET dll封装(包含UI和实现函数),通过反射调用dll实现控件的快速加载(PrimPointListCreator.cs)
- C#&nbsp;Winform中如何实现窗体之…
- FLASH MX如何实现用action script调用外部文本文件的内容
- 在EXE文件中如何实现调用另外一个EXE文件中的方法?