C# 类实例化后的内存地址如何取得
一个类的对象实例化后如何获取到内存的地址? 如果获取到了内存地址如何取地址里的值,然后再往地址里写入值?这个方法我主要是想实现: 在一软件里提供一接口,让另一个软件通过这个接口来取得一些数据并更改里面的一些数据。 软件是winfrm,不采用webservers。其实就是在一台电脑里运行这两个软件。 我想到一个办法就是定义一个接口,该接口通过COM去操作那个软件,但这样不好如何操作,又想直接操作内存去处理?
不知那位高手有好的办法不? --------------------编程问答-------------------- 对象在内存里经常浮动,谁跟你说物理地址是固定不变的? --------------------编程问答-------------------- 不要只会点c、c++概念。
大多数公司招聘码农,不是为了搞这个底层概念,而是高级地能干点项目。 --------------------编程问答-------------------- 百度 共享内存 C#
或找 植物大战僵尸内存修改器源码 C# csdn下载里面也有,就是你想要的了 --------------------编程问答-------------------- struct可以,reference object不是不可以,但是需要对clr hacking有很深入的理解,我想能做到的人除了微软,这个地球上不超过2位数。 --------------------编程问答-------------------- 当然了,如果你就是实现一个进程通讯,这是一个弱爆了的需求,蓝翔学生都可以做。
不要啥也不会就想解决“难题”。你这个好比“如何把物体以光速运动”,仔细一问原来你连电子邮件都不知道,只会写信,看人家用电子邮件的能随时联系,想当然的认为人家是用一种超快速的工具运送纸信。 --------------------编程问答--------------------
物理地址是固定的 数值型的 (除了string 类型),他是有规律的,程序的运行基址+偏移地址 就是程序中的某个变量的地址了。
--------------------编程问答--------------------
你知道一点,又不全知道,囫囵吞枣,不求甚解。
你说的基本上是static variable,事实上还有在heap和stack上分配的。 --------------------编程问答--------------------
班主说的极是。但楼主说的用到static variable这个即可,而且代码还是他自己开发的他自己控制就行了,又不是那个搞游戏外挂。。。 --------------------编程问答--------------------
高级黑。 --------------------编程问答-------------------- 调用Com接口,在C#会比较麻烦,最大的问题就是CLR静态类型在编译期就已经绑定了,需要一堆的反射+接口/类型的转换
但用VB.Net就不一样了,由于VB中类型可以后期绑定,获取到某接口的COM实例后,可以直接调用接口方法,但带来的问题就是类型安全以及调试的困难(由于存在AppDomain跨域问题,有些异常是捕获不到的,单步调试时会直接跳出调试)
--------------------编程问答--------------------
Public Class ComProxy
Public Sub New(typeCLSID As Guid)
If typeCLSID = Guid.Empty Then
Throw New ArgumentNullException("CLSID")
End If
Try
Dim type As Type
type = System.Type.GetTypeFromCLSID(typeCLSID)
Me.ComObject = Activator.CreateInstance(type)
Me._clsID = typeCLSID
Catch exp As Exception
Throw New System.ComponentModel.Win32Exception("Failed to create instance by CLSID for COM: " & typeCLSID.ToString(), exp)
End Try
End Sub
Public Sub New(progID As String)
If String.IsNullOrEmpty(progID) Then
Throw New ArgumentNullException("progId")
End If
Try
Me.ComObject = GetObject(, progID) 'VB方法
'Me.ComObject = Marshal.GetActiveObject(progID) 'Net方法
Me._progID = progID
Catch exp As Exception
Throw New System.ComponentModel.Win32Exception("Failed to create instance by ProgID for COM: " & progID, exp)
End Try
End Sub
可以直接使用New ComProxy().COM接口方法() 会有编译警告
但好处也是很明显的
你还是.NET 3.5的老皇历了。 --------------------编程问答--------------------
是啊,私下里玩高版的。其实早看了VS2010发布会上那个犀利的反射例子 --------------------编程问答-------------------- 自己实现个clr,取消托管堆,把C#弄成C --------------------编程问答-------------------- 让一个软件去操作另一个软件?
补充:.NET技术 , C#