我想传递一个指向函数的指针.我希望这个指针指向数组中间的某个位置.假设我有这样的数组unsigned char BufferData[5000];,下面的语句在语法上是否正确?
writeSECTOR( destAddress, (char *)( BufferData + (int)(i * 512 )) );
// destAddress is of type unsigned long
// writeSECTOR prototype: int writeSECTOR ( unsigned long a, char * p );
// i is an int
Run Code Online (Sandbox Code Playgroud) 我是嵌入式系统编程的新手.我正在使用8051芯片组的设备.我在示例程序中注意到,在定义变量时,有时它们使用关键字xdata.像这样...
static unsigned char xdata PatternSize;
而其他时候省略了xdata关键字.
我的理解是xdata关键字指示编译器将该变量存储在外部闪存中.
在什么情况下我应该使用xdata在外部存储变量?访问这些变量需要更长时间,对吧?使用xdata存储的值在设备硬重置后不会保留吗?
另外,我理解static关键字意味着变量将在每次调用它所定义的函数时持续存在.是否必须一起使用static和xdata?
我正在使用我的一个C#.NET项目进行一些诊断日志记录,我希望能够记录代表一个特定类的实例的标识符.我知道我可以用一个静态变量做到这一点,每次创建一个类实例时它都会增加,但我只是想知道在.NET框架中是否有任何内置方法来执行此操作.也许使用反射或其他东西.
我有一个我已经制作的类库项目.我们称之为ClassA.在ClassA中,我需要访问一些驻留在DLL中的工具(ToolsDLL.dll).
在ClassA中,我将ToolsDLL.dll添加到项目中,并选择ToolsDLL.dll文件复制到输出目录ALWAYS.因此,库构建和编译就好了,在输出目录中,我看到ClassA.dll和ToolsDLL.dll
接下来,我想编写一个应用程序,比如使用ClassA中的方法的App_A.因此,在我的App_A项目中,我添加了对ClassA.dll的引用,以便我可以访问它的命名空间.一切都很好,它建立/编译.
问题是,当我运行App_A并且它到达需要使用ToolsDLL.dll的点时,它会引发异常"无法加载ToolsDLL.dll.我不明白它怎么可能找不到它该DLL因为它与ClassA.dll在同一目录中.
我发现如果我将ToolsDLL.dll放在App_A的输出目录中,它就可以了.那有什么办法吗?有没有什么方法可以将ToolsDll.dll以某种方式与ClassA.dll捆绑在一起.原因是我的客户将编写他们自己的类似于AppA的应用程序,如果他们只需要在他们的项目中引用一个文件而不是多个文件就会很好.
我正在尝试使用C#获取CHM文件以打开特定主题.
我试过用
Help.ShowHelp(this, path, HelpNavigator.Topic, "TopicTitle");
Run Code Online (Sandbox Code Playgroud)
但它找不到页面.我不能正确地键入主题标题.有没有办法我可以以编程方式从CHM文件中检索所有主题,以便我可以看到它们是什么?
我正在尝试为使用Visual Studio 2008在C#中编写的类库驱动程序编写安装项目/安装程序.驱动程序项目有一段看起来像这样的代码...
[ComRegisterFunction]
public static void RegisterASCOM(Type t)
{
Trace.WriteLine("Registration Started.");
DoRegistration(true);
}
Run Code Online (Sandbox Code Playgroud)
在驱动程序项目属性 - >"装配信息"中,我设置了选中Make COM-Visible = true的框.
我在VS中的解决方案中添加了一个Setup Project,从驱动程序项目添加了输出dll,以便它安装在目标机器上并将dll的Register属性设置为"vsdraCOM".所以,我的理解是当安装程序运行它时,应该执行用[COMRegisterFunction]标记的dll方法.
使用SysInternals Debug View我可以通过观察窗口中显示的"Registration started"文本来监视上面的代码片段何时被点击.当我构建解决方案时,我可以看到文本显示,所以我知道驱动程序正在正确注册.问题是,当我运行安装程序时,我不认为它正在执行注册位.我看到Debug View中没有显示任何内容.如果我尝试通过另一个应用程序访问我的驱动程序,我收到一个错误,说"无法创建ActiveX对象".为什么在安装过程中不会发生注册?
驱动程序注册COM,但它不会调用我的自定义注册方法.
有没有人对我可能遗失的东西有所建议?还有其他方法可以调试吗?
(如果有人想看看,我可以提供更多代码!!)
好吧,我想在VBA中使用几个.NET类.所以我必须通过COM注册它们.我想我已经找到了COM注册(最后),但现在我需要有关如何创建对象的语法的帮助.这是一些伪代码,显示了我想要做的事情.
编辑:更改附加对象以返回ArrayList而不是List
.NET类看起来像这样......
public class ResourceManagment
{
public ResourceManagment()
{
// Default Constructor
}
public static List<RandomObject> AttachedObjects()
{
ArrayList list = new ArrayList();
return list;
}
}
public class RandomObject
{
//
public RandomObject(int someParam)
{
}
}
Run Code Online (Sandbox Code Playgroud)
好的,这就是我想在VBA中做的事情(用C#演示),但我不知道怎么做......
public class VBAClass
{
public void main()
{
ArrayList myList = ResourceManagment.AttachedObjects();
foreach(RandomObject x in myList)
{
// Do something with RandomObject x like list them in a Combobox
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是RandomObject没有公共默认构造函数.所以我无法创建它的实例Dim x As New RandomObject.MSDN说你不能通过COM实例化一个没有默认构造函数的对象,但是如果它被另一个方法返回,你仍然可以使用它.Types …
我有一个C#windows窗体应用程序.我当前设置它的方式,当Form1_Load()运行时,它检查恢复的未保存数据,如果找到一些,它会提示用户是否要打开该数据.当程序运行时,它可以正常工作但是消息框会立即显示,并且主程序表单(Form1)在用户单击是或否之后才会显示.我想首先弹出Form1然后弹出消息框提示.
现在,在我在Form中创建一个计时器之前解决这个问题,在Form1_Load()方法中启动计时器,然后在第一个Timer Tick事件中执行检查和用户提示.这种技术解决了这个问题,但似乎可能有更好的方法.
你们有更好的想法吗?
编辑:我想我也使用后台工作人员做类似的事情.通过调用方法返回到表单线程所有麻烦似乎有点傻了,所有的垃圾只是让它延迟了几毫秒!
我已经为微控制器编写了许多C程序,但从来没有一个在像linux这样的操作系统上运行的程序.linux如何确定为我的应用程序提供多少处理时间?当我有空闲时间告诉操作系统去做其他事情并稍后再回到我身边以便其他进程也有时间运行时,我需要做些什么吗?或者OS是否只是自动执行此操作?
编辑:添加更多细节我的c程序有一个任务调度程序.有些任务每100毫秒运行一些,有些任务每50毫秒运行一次,依此类推.在我的主程序循环中,我调用ProcessTasks来检查是否有任何任务准备好运行,如果没有准备就绪它会调用空闲函数.空闲功能除了它之外什么都不做,所以我可以用Ocope窥镜切换GPIO引脚并监视空闲时间...或者如果我愿意的话.所以也许我应该在这个空闲函数中调用sched_yield()???
我正在使用.NET framework 3.5版在C#.NET上开展一个项目.
我的项目有一个名为Focuser.cs的类,它代表一个物理设备,一个望远镜聚焦器,可以通过串行(RS-232)端口与PC通信.我的类(Focuser)具有CurrentPosition,CurrentTemperature等属性,它们代表聚焦器的当前条件,它可以随时改变.因此,我的Focuser类需要不断轮询设备以获取这些值并更新其内部字段.我的问题是,执行此连续轮询序列的最佳方法是什么?有时,用户需要将设备切换到不同的模式,这需要能够停止轮询,执行某些操作,然后恢复轮询.
我的第一次尝试是使用每500ms滴答一次的时间,然后调出一个背景工作者,该工作人员轮询一个位置然后返回一个温度.当计时器勾选后台工作人员是忙碌时,它只会返回并在500毫秒后再次尝试.有人建议我一起摆脱背景工作者,只是在计时器刻度事件中进行轮询.因此,我将计时器的AutoReset属性设置为false,然后每次轮询完成时重新启动计时器.这两种技术似乎在我的应用程序中表现完全相同,所以我不确定一个是否优于另一个.每次我想使用新的ThreadStart进行轮询操作时,我也尝试创建一个新线程.这似乎也很好.
我应该提一件事.此类是COM对象服务器的一部分,这基本上意味着将通过COM调用生成的类库.我不确定这是否对答案有任何影响,但我只是认为我应该把它扔出去.
我问这一切的原因是我的所有测试工具运行和调试版本工作得很好但是当我做一个发布版本并尝试从另一个应用程序调用我的类时,该应用程序冻结并且我有一个很难确定原因.
任何建议,建议,意见将不胜感激.
谢谢,乔丹