小编Gio*_*der的帖子

C#:在运行时获取值类型变量的大小?

我知道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#中有一些正常的方法可以在运行时获取数据大小,但谷歌并没有提供太多帮助..这是我最后的希望

c# variables runtime value-type

21
推荐指数
4
解决办法
4万
查看次数

在C#中调用c dll

问题简介:

我必须通过提供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)

问题:

  • 那是因为标题中的函数被声明为dllimport吗?
  • 在这种情况下,我是否必须使用声明为dllexport的C++函数包装DLL?
  • 可以从C#访问C DLL所需的步骤是什么?
  • 在C#项目中,我是否还必须包含LIB文件?不只是DLL文件本身?

c c# c++ dllimport dllexport

6
推荐指数
1
解决办法
977
查看次数

VB6中变量声明中的星号

在变量声明之后,星号(*)和数字的含义是什么?如图所示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)

vb6 variable-declaration

5
推荐指数
1
解决办法
1495
查看次数

VB6:如何创建DLL并在C#中使用它?

可能重复:
在C#中使用VB6类

我有一个用VB6编写的序列化egnine,它以一种我无法弄清楚的神秘方式进行二进制序列化.我还有一个C#程序需要按照VB6代码的方式进行序列化.

所以我想在DLL中制作VB6序列化代码并在C#程序中使用它,以便二进制序列化适合.我怎样才能做到这一点?

c# vb6 dll

4
推荐指数
1
解决办法
724
查看次数

MVVM - 具有多态性的集合

我试图在ListBox中公开两个派生类型:OutFlight和InFlight都派生自Flight,它是一个抽象类型.

MVVM说我必须为ListBox的绑定模型设置ViewModel.对于一种类型的曝光来说,这不是什么大问题,但我的列表框包含两种派生类型,我正在寻找最好的MVVM方法.这是否意味着我必须为每个派生类型设置继承的ViewModel?我已经读过某处ViewModel继承不被推荐......我确信这是一个非常常见的情况

c# wpf .net-4.0 mvvm

4
推荐指数
1
解决办法
442
查看次数

在后台创建一个可以收听键盘的进程

我有一个在后台运行的项目在不同的过程中,我希望它能够对任何地方的键盘做出反应,例如我运行项目,然后我在计算机中做其他的东西,如浏览,Facebook,看电影等等.每次按F9我想让我的项目出现.与按键组合调用Babylon的方式相同......我想在C#中实现它,我不知道如何开始.

c# windows winapi

2
推荐指数
1
解决办法
5049
查看次数

MVVM:模型状态更改时通知视图

这是关于MVVM模式最佳实践的特定问题.我正在使用MvvmLight库.它是这样的:我的模型,说"飞行",实现了一些业务逻辑,可以通过方法启动,暂停和停止飞行.无论是停止还是暂停飞行,每种方法都会使其功能发生.一个重要的变量是状态枚举,表示航班状态 - 播放,停止或暂停.如上所述,状态变量(和属性)在模型中定义.另一方面,航班类由一个ViewModel类包装,该类包含一个包裹飞行模型中状态变量的Status属性,以及连接到飞行模型播放停止暂停方法的RelayCommands.

这里问题开始了:当我通过视图执行其中一个命令时,它会执行模型中的方法,以便状态变量本身直接更改,但它只会在模型中更改.ViewModel中的status属性不会知道包装变量是否已被更改,因为它已被直接更改...这意味着如果某个视图元素绑定到status属性,它将不会在命令执行时更改.

我知道有几种方法可以解决这个问题,但我要求一个公平的解决方案,不会破坏MVVM模式(比如在模型中的飞行类中使用INotifyPropertyChanged)

wpf mvvm mvvm-light

2
推荐指数
1
解决办法
4023
查看次数

在集合中公开的模型中实现INotifyPropertyChanged

我在一个用DataTemplate设计的ObservableCollection中暴露了一个Model类,其中处理了Model的proeprty绑定.

当我手动在Model类中实现INotifyPropertyChanged接口时,ObservableCollection中的绑定proeprty不会自动更改,而只是在重新呈现集合之后.

当我从ViewModelBase(MVVM Light工具包类)继承并使用RasiePropertyChanged方法时,绑定属性会自动更改而不刷新整个集合.

除了实现INotifyPropertyChanged接口之外,ViewModelBase做了什么?

c# wpf mvvm mvvm-light

1
推荐指数
1
解决办法
1602
查看次数