我知道C和C++等语言允许在运行时使用sizeof()函数确定数据的大小(结构,数组,变量......).我在C#中尝试过,显然它不允许将变量放入sizeof()函数中,但只键入defintions(float,byte,Int32,uint等等),我该怎么做呢?
实际上,我希望这种情况发生:
int x;
Console.WriteLine(sizeof(x)); // Output: 4
Run Code Online (Sandbox Code Playgroud)
并不是:
Console.WriteLine(sizeof(int)); // Output: 4
Run Code Online (Sandbox Code Playgroud)
我确信在C#中有一些正常的方法可以在运行时获取数据大小,但谷歌并没有提供太多帮助..这是我最后的希望
问题简介:
我必须通过提供DLL文件,LIB文件和c函数头文件的API来控制某个设备,其函数被声明为dllimport.
当我在C++项目中使用API时,一切正常 - 我包含头文件,lib,dll,并调用头文件中声明的函数.
当尝试使用[DllImport]属性从C#.NET项目调用这些函数时,问题就出现了:使用确切的名称和参数声明函数,并且运行代码不会抛出任何异常.然而,设备根本没有响应,就像从未实际调用过的函数一样.
它是如何在C头中声明的:
int __declspec(dllimport) Init_Card_RTx(unsigned short device_num, unsigned short enabled_channels, unsigned short xmt_channels);
Run Code Online (Sandbox Code Playgroud)
它是如何在C#中声明的:
[DllImport(Path, CallingConvention = CallingConvention.Cdecl, EntryPoint = "Init_Card_RTx")]
public static extern int Init_Card_RTx(UInt16 device_num, UInt16 enabled_channels, UInt16 xmt_channels);
Run Code Online (Sandbox Code Playgroud)
问题:
在变量声明之后,星号(*)和数字的含义是什么?如图所示WpName As String * 6
Public Type WayPoint
WpIndex As Integer
WpName As String * 6
WpLat As Double
WpLon As Double
WpLatDir As String * 1
WpLonDir As String * 1
End Type
Run Code Online (Sandbox Code Playgroud) 可能重复:
在C#中使用VB6类
我有一个用VB6编写的序列化egnine,它以一种我无法弄清楚的神秘方式进行二进制序列化.我还有一个C#程序需要按照VB6代码的方式进行序列化.
所以我想在DLL中制作VB6序列化代码并在C#程序中使用它,以便二进制序列化适合.我怎样才能做到这一点?
我试图在ListBox中公开两个派生类型:OutFlight和InFlight都派生自Flight,它是一个抽象类型.
MVVM说我必须为ListBox的绑定模型设置ViewModel.对于一种类型的曝光来说,这不是什么大问题,但我的列表框包含两种派生类型,我正在寻找最好的MVVM方法.这是否意味着我必须为每个派生类型设置继承的ViewModel?我已经读过某处ViewModel继承不被推荐......我确信这是一个非常常见的情况
我有一个在后台运行的项目在不同的过程中,我希望它能够对任何地方的键盘做出反应,例如我运行项目,然后我在计算机中做其他的东西,如浏览,Facebook,看电影等等.每次按F9我想让我的项目出现.与按键组合调用Babylon的方式相同......我想在C#中实现它,我不知道如何开始.
这是关于MVVM模式最佳实践的特定问题.我正在使用MvvmLight库.它是这样的:我的模型,说"飞行",实现了一些业务逻辑,可以通过方法启动,暂停和停止飞行.无论是停止还是暂停飞行,每种方法都会使其功能发生.一个重要的变量是状态枚举,表示航班状态 - 播放,停止或暂停.如上所述,状态变量(和属性)在模型中定义.另一方面,航班类由一个ViewModel类包装,该类包含一个包裹飞行模型中状态变量的Status属性,以及连接到飞行模型播放停止暂停方法的RelayCommands.
这里问题开始了:当我通过视图执行其中一个命令时,它会执行模型中的方法,以便状态变量本身直接更改,但它只会在模型中更改.ViewModel中的status属性不会知道包装变量是否已被更改,因为它已被直接更改...这意味着如果某个视图元素绑定到status属性,它将不会在命令执行时更改.
我知道有几种方法可以解决这个问题,但我要求一个公平的解决方案,不会破坏MVVM模式(比如在模型中的飞行类中使用INotifyPropertyChanged)
我在一个用DataTemplate设计的ObservableCollection中暴露了一个Model类,其中处理了Model的proeprty绑定.
当我手动在Model类中实现INotifyPropertyChanged接口时,ObservableCollection中的绑定proeprty不会自动更改,而只是在重新呈现集合之后.
当我从ViewModelBase(MVVM Light工具包类)继承并使用RasiePropertyChanged方法时,绑定属性会自动更改而不刷新整个集合.
除了实现INotifyPropertyChanged接口之外,ViewModelBase做了什么?