我正在尝试枚举程序集中的所有方法并将它们添加到树视图中的节点:
private void bOpen_Click(object sender, EventArgs e)
{
var ofd = new OpenFileDialog();
if (ofd.ShowDialog() != DialogResult.OK)
return;
var asm = Assembly.LoadFile(ofd.FileName);
foreach (Module module in asm.GetModules())
{
var tnode = new TreeNode(module.Name);
foreach (MethodInfo method in module.GetMethods())
{
tnode.Nodes.Add(method.Name);
}
treeView1.Nodes.Add(tnode);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是任何模块都没有方法.我知道它与treeview无关,因为module.GetMethods().长度返回0.有什么我缺少的吗?
我在项目中遇到了一个非常奇怪(且令人讨厌)的链接器错误.
比方说,我有文件KernelExports.h:
#pragma once
extern "C"
{
DWORD* KeTimeStampBundle;
DWORD KeGetCurrentProcessType();
//etc...
}
Run Code Online (Sandbox Code Playgroud)
我然后#include在我的stdafx.h中,然后添加#include "stdafx.h"所有我的*.cpp文件.问题是,现在每当我建我得到的链接错误流:LNK2005: KeTimeStampBundle already defined in stdafx.obj.这不应该发生,因为头文件只包含在一个文件中并受到包含保护的保护.一旦我注释掉整个extern "C"块,错误就会停止,所以我知道这就是导致问题的原因.
更奇怪的是,当我将所有这些源文件添加到它构建的新项目时没有任何问题.我不知道这里有什么问题,任何人都可以启发我吗?
我的IDE是Visual Studio 2008.
我不确定这是否可行,但我希望能够让父类可以看到基类的字段/方法.
比方说,我有一个班级:
public class ExampleFile
{
private Stream _stream;
private long _baseoffset;
public ExampleFile(Stream input)
{
_stream = input;
_baseoffset = input.Position;
}
public void SeekTo(long offset)
{
_stream.Seek(offset + _baseoffset, SeekOrigin.Begin);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将该类用作另一个类的基础:
public class ExampleClass : ExampleFile
{
public ExampleClass(Stream input)
: base(input)
{
}
public byte[] GetSomething()
{
byte[] id = new byte[5];
SeekTo(2);
base._stream.Read(id, 0, 5);
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让字段/方法ExampleFile只显示ExampleClass?
我正在尝试创建一个基本函数来交换short int的endianness但是它抛出了一个错误:
#ifndef __ENDIAN__
#define __ENDIAN__
#define Swap16(value) \
((((unsigned short)((value) & 0x00FF)) << 8) | \
(((unsigned short)((value) & 0xFF00)) >> 8))
#define Swap32(value) \
((((unsigned)((value) & 0x000000FF)) << 24) | \
(((unsigned)((value) & 0x0000FF00)) << 8) | \
(((unsigned)((value) & 0x00FF0000)) >> 8) | \
(((unsigned)((value) & 0xFF000000)) >> 24))
void __inline SwapEndian(short* value) //ERROR HERE
{
*value = Swap16(value);
}
#endif
Run Code Online (Sandbox Code Playgroud)
我打算使用如下代码:
short val = 0x1234;
SwapEndian(&val);
//val now contains 0x3412
Run Code Online (Sandbox Code Playgroud)
我正在使用VS2008,确切的错误是:
C2296: '&' : illegal, left …Run Code Online (Sandbox Code Playgroud)