C# 如何从C访问.h文件信息#
当使用NI工具创建FPGA位文件时,LabView生成一个C.h文件,其中包含用于与FPGA应用程序通信的信息,如签名(常量)和寄存器地址(作为枚举) 挑战在于我的应用程序是用C#编写的,我需要访问这些寄存器地址 我能想到的唯一选择是:C# 如何从C访问.h文件信息#,c#,c,parsing,header-files,C#,C,Parsing,Header Files,当使用NI工具创建FPGA位文件时,LabView生成一个C.h文件,其中包含用于与FPGA应用程序通信的信息,如签名(常量)和寄存器地址(作为枚举) 挑战在于我的应用程序是用C#编写的,我需要访问这些寄存器地址 我能想到的唯一选择是: 将.h文件的内容剪切并粘贴到.cs文件中。。。让我不寒而栗的是,C#是一个开发者,FPGA是另一个开发者 解析.h文件~~~~~。。。也让我不寒而栗-编写自己的语言解析器:( 一定有更好的办法 样本h: /* * Generated with the FPG
/*
* Generated with the FPGA Interface C API Generator 12.0.0
* for NI-RIO 12.0.0 or later.
*/
#ifndef __NiFpga_M_OTRM_OVDFPGA_h__
#define __NiFpga_M_OTRM_OVDFPGA_h__
#ifndef NiFpga_Version
#define NiFpga_Version 1200
#endif
#include "NiFpga.h"
/**
* The filename of the FPGA bitfile.
*
* This is a #define to allow for string literal concatenation. For example:
*
* static const char* const Bitfile = "C:\\" NiFpga_M_OTRM_OVDFPGA_Bitfile;
*/
#define NiFpga_M_OTRM_OVDFPGA_Bitfile "NiFpga_M_OTRM_OVDFPGA.lvbitx"
/**
* The signature of the FPGA bitfile.
*/
static const char* const NiFpga_M_OTRM_OVDFPGA_Signature = "D0751ADE3A0EC976606D63C425B35E85";
typedef enum
{
NiFpga_M_OTRM_OVDFPGA_IndicatorBool_FallingEdge = 0x8132,
NiFpga_M_OTRM_OVDFPGA_IndicatorBool_StopSignal = 0x813A,
} NiFpga_M_OTRM_OVDFPGA_IndicatorBool;
....
#endif
如果它只可能是你需要分析的一小部分的东西,事实上,它不必解析,但可能只需要做一些文本操作/搜索替换。它不应该太难。此外,你可以使用C++。NET将这些东西封装成一个可以从C中使用的API。
此外,你可能还想看看类似“SWIG”的东西我通过向解决方案中添加一个C++/CLI项目解决了这个问题,该项目包括.h文件,并通过托管静态方法公开信息
public ref class OTRM_Ovd_FPGA
{
public:
static System::String^ GetFilename() { return gcnew System::String(NiFpga_M_OTRM_OVDFPGA_Bitfile);};
static System::String^ GetSignature() { return gcnew System::String(NiFpga_M_OTRM_OVDFPGA_Signature);};
enum class RegisterAddress : System::UInt16
{
InitialPulseAmplitude = NiFpga_M_OTRM_OVDFPGA_IndicatorU16_ExtPulseAmplitudeDisplay,
CurrentPulseAmplitude = NiFpga_M_OTRM_OVDFPGA_IndicatorU16_ExtPulseAmplitudeDisplay,
PulseAmplitudeDecrement = NiFpga_M_OTRM_OVDFPGA_ControlU16_Decrement_Step,
PollPeriod = NiFpga_M_OTRM_OVDFPGA_ControlI16_Frequency_ms,
HvprotState = NiFpga_M_OTRM_OVDFPGA_ControlI16_HVProt,
PaceThreshold = NiFpga_M_OTRM_OVDFPGA_ControlI16_VVIThreshold,
};
};
你能发布一个.h文件的示例吗?如果它足够简单,请使用regex。否则gcc xmlHow是发布示例.h文件的最佳方式?只需在答案中添加一个小的指示性示例,并使用“作为代码的格式”按钮。“C++.NET”你的意思是C++/CLII不想更新FPGA以要求代码更改(最坏的情况下是构建更新)吗它不会改变,除非它改变了我的想法,我认为C++,NET/C++,CLI;但是我相信它已经被微软正式中断了。我不能保证文件不会改变。登记地址是自动选择的。h是自动生成的。最终这将是很好的。最终我可以移动FPGA文件。(包括生成的.h文件)从应用程序构建到FPGA构建,并使应用程序构建依赖于FPGA构建。然后,FPGA开发人员可以在自己的空间中工作,而不必担心什么构建使用了他的工作…也就是说,直到他破坏了构建-构建服务器将捕获该构建,并自动发送给他,应用程序开发人员操作(和我)一封电子邮件。NICE(IMHO)谢谢Keith,使用语法使其工作比我预期的要困难得多,所以我想展示实际的解决方案。该解决方案的一个丑陋部分是它只支持x86。要使它支持x64,必须使用/clr:safe编译它。不幸的是,/clr:safe不允许使用指针(我必须在.h中使用char*来定义字符串)。非常接近,但目前为止。