小编Nic*_*ick的帖子

C#.NET对象处理

应该是一个简单的.假设我有以下代码:

void Method()
{
   AnotherMethod(new MyClass());
}

void AnotherMethod(MyClass obj)
{
   Console.WriteLine(obj.ToString());
}
Run Code Online (Sandbox Code Playgroud)

如果我调用"Method()",那么在该过程中创建的MyClass对象会发生什么?它是否仍然存在于调用后的堆栈中,即使没有使用它?还是会立即删除?

我是否必须将其设置为null才能让GC更快地注意到它?

.net c# garbage-collection dispose object

8
推荐指数
2
解决办法
1517
查看次数

带有CheckBoxes的C#ListView,多选行时检查自动复选框

我正在使用带有multirow和fullrow select的ListView控件.当我一次选择多行时,我的一些行会神奇地被检查.拖动鼠标时也会选择一个鼠标,然后单击另一个鼠标,就会发生这种情况.

请参阅此处描述问题的图片 替代文字

葡萄柚到底发生了什么?任何人?

c# checkbox listview multi-select winforms

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

读取C#中目录的权限

我注意到如果你更改了特定目录的安全设置,你可以在Windows中使该文件夹不再"可浏览".特别是,将管理员的"读取"权限更改为"拒绝"将使该文件夹无法访问.

我现在的问题是,我如何在代码中解决这个问题?我跟着让我接近,但它仍然是不对的:

/// <summary>
/// Takes in a directory and determines if the current user has read access to it (doesn't work for network drives)
/// THIS IS VERY HACKY
/// </summary>
/// <param name="dInfo">directoryInfo object to the directory to examine</param>
/// <returns>true if read access is available, false otherwise</returns>
public static bool IsDirectoryReadable(DirectoryInfo dInfo)
{
    try
    {
        System.Security.AccessControl.DirectorySecurity dirSec = dInfo.GetAccessControl();
        System.Security.Principal.WindowsIdentity self = System.Security.Principal.WindowsIdentity.GetCurrent();
        System.Security.Principal.WindowsPrincipal selfGroup = new System.Security.Principal.WindowsPrincipal(self);
        // Go through each access rule found for the …
Run Code Online (Sandbox Code Playgroud)

c# directory permissions

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

最后一列标题后的DataGridView空格

我试图模仿每个其他表格视图对DataGridView控件的作用,但我似乎无法使标题正确.

我想在所有标题的右边有一个空白标题,它不会移动,实际上并不是标题.有没有办法在顶部绘制默认标题?

基本上,这是我的问题:

问题

.net datagridview header paint

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

从另一个python脚本终止python脚本

我有一个长期运行的python脚本,我希望能够从另一个python脚本结束.理想情况下,我正在寻找的是一种方法,将进程ID设置为第一个脚本,并能够通过第二个脚本中的ID识别它是否正在运行.此外,我希望能够终止这个长时间运行的进程.

是否存在任何很酷的捷径来实现这一目标?

此外,我在Windows环境中工作.

我刚刚在这里找到了另一个答案:检查python脚本是否正在运行

python process terminate

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

PostMessage 无法传递字符串 C#

这是我的原型:

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);
Run Code Online (Sandbox Code Playgroud)

这是我如何使用它:

PostMessage(HWND_BROADCAST, msg, Marshal.StringToHGlobalAuto("bob"), IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

在另一个线程中,我可以截获此消息,但是当我尝试使用以下方法取回 bob 时:

string str = Marshal.PtrToStringAuto(m.WParam); // where m = the Message object
Run Code Online (Sandbox Code Playgroud)

我没有得到鲍勃在 str。

我认为这一定是因为我在一个线程的堆栈上引用了“bob”字符串,而该引用在另一个线程的堆栈中绝对没有意义。但如果是这样的话,这些 wparam 和 lparam 指针真的只用于在同一线程中传递的消息吗?

编辑*更正:通过线程我的意思是进程。这是在进程之间传递字符串而不是线程的问题。

c# parameters postmessage intptr

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

使用 OpenSSL 以编程方式将 .PEM 证书转换为 .PFX

我有一个.PEM 文件,我想将其转换为 PKCS12 文件 (PFX),我知道我可以使用以下openssl命令轻松完成此操作:

Create a PKCS#12 file:

 openssl pkcs12 -export -in file.pem -out file.p12 -name "My Certificate"
Run Code Online (Sandbox Code Playgroud)

这很好,但我想使用OpenSSL调用以编程方式执行此操作。不幸的是,OpenSSL 的文档并不理想。

我已经研究过使用其他库来做到这一点:

使用 .NET:我可以从 PEM 文件创建 X509Certificate2 对象,但这只会获取第一个证书并忽略 PEM 文件中的任何中间 CA。

使用Mentalis.org安全库:我可以从 PEM 文件创建证书对象,但我在文档中看到以下内容:

备注 此实现仅从 PEM 文件读取证书。它不会从证书文件中读取私钥(如果存在)。

所以,这对我没有帮助。我也需要那个私钥。

我基本上需要重新创建 OpenSSL 命令行工具操作以实现 PEM>PFX,但在代码中。

有没有更简单的方法来做到这一点?

openssl pfx pkcs#12 x509certificate2 pem

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

如何将IntPtr转换回对象

全部,这是上一个问题的后续跟进:C#格式化外部Dll函数参数

这里特别是我试图转换为C#的代码:

FILES_GetMemoryMapping((LPSTR)(LPCTSTR)MapFile, &Size, (LPSTR)MapName, &PacketSize, pMapping, &PagePerSector);
// Allocate the mapping structure memory
pMapping = (PMAPPING)malloc(sizeof(MAPPING));
pMapping->NbSectors = 0;
pMapping->pSectors = (PMAPPINGSECTOR) malloc((Size) * sizeof(MAPPINGSECTOR));

// Get the mapping info
FILES_GetMemoryMapping((LPSTR)(LPCTSTR)MapFile, &Size, (LPSTR)(LPCTSTR)MapName, &PacketSize, pMapping, &PagePerSector);
Run Code Online (Sandbox Code Playgroud)

函数"FILES_GetMemoryMapping"被调用两次,我猜第一次得到结构的大小,第二次实际填充它.

"pMapping"是指向C++结构的指针,在我的C#代码中,我将pMapping作为IntPtr类型.下一行我可以转换为:

pMapping = Marshal.AllocHGlobal(Marshal.SizeOf(new UM0516.Mapping()));
Run Code Online (Sandbox Code Playgroud)

(UM0516.Mapping)是结构.很酷,所以我刚刚分配了一些IntPtr指向的空间.现在为下一行......"pMapping-> NbSectors = 0;"

我怎么想进入现在分配的非托管内存空间,键入将其转换为(UM0516.Mapping)结构,并设置其中一个成员?然后确保我没有过多地使用它,以便第二次调用"FILES_GetMemoryMapping"时,它现在可以使用这个结构吗?

- 好的,我已经采取了一些建议,现在有了这个:

我尝试了这个,并在第一个"FILES_GetMemoryMapping"调用中得到"AccessViolationException未处理"异常

这是我有的:

string filepath = @"C:\blah.blah";
string MapFile = @"D:\blah.blah";
UM0516.Mapping myMapping = new UM0516.Mapping();
IntPtr pMapping = Marshal.AllocHGlobal(Marshal.SizeOf(myMapping));
Marshal.StructureToPtr(myMapping, pMapping, false);
ushort PacketSize = 0;
ushort size = …
Run Code Online (Sandbox Code Playgroud)

c# unmanaged marshalling intptr

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

无法从Windows Mono C#Project访问Linux gcc编译的.so共享库

这是设置:

我有一个共享库(带有extern"C"方法的c ++)我在linux中编译并创建了一个library.so文件.

我在同一个盒子(Ubuntu)上使用Mono Develop并且能够DLLImport("library.so")并且访问我的extern函数没问题.

当我将.so文件复制到Windows机器(Win7)并尝试做同样的事情时,问题出现了,但这次在MonoDevelop的Windows下运行Mono.

我得到一个System.BadImageFormatException.我试过在library.so文件之前做一个"./",但没有任何帮助.我已经检查并仔细检查它是否正在查看正确的目录.

有什么大的我不知道为什么我无法在Windows/Mono下访问这个.so文件?

c# mono dllimport monodevelop badimageformatexception

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

Python撤消Unicode

假设我有以下两个变量:

bob1 = u'bob\xf0\xa4\xad\xa2'

bob2 = 'bob\xf0\xa4\xad\xa2'
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到值bob1的价值bob2?也就是说,如何展开unicode格式,但保留转义的十六进制值?

如果我这样做:

bob1.encode('utf8')
'bob\xc3\xb0\xc2\xa4\xc2\xad\xc2\xa2'
Run Code Online (Sandbox Code Playgroud)

那是不对的...

救命!

python unicode encoding utf-8

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