标签: unmanaged

如何将非托管双精度转换为托管字符串?

从托管C++,我调用一个非托管C++方法,它返回一个double.如何将此双精度转换为托管字符串?

c++ double unmanaged managed

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

调用非托管函数char返回char*

我在非托管C/C++代码(dll)中有一个函数,它返回一个包含char数组的结构.我创建了C#struct来接收调用该函数的返回值.并且调用此函数的uppon得到'System.Runtime.InteropServices.MarshalDirectiveException'

这是C声明:

typedef struct T_SAMPLE_STRUCT {
int num;
char text[20];
} SAMPLE_STRUCT;

SAMPLE_STRUCT sampleFunction( SAMPLE_STRUCT ss );
Run Code Online (Sandbox Code Playgroud)

这是C#声明:

struct SAMPLE_STRUCT
{
    public int num;
    public string text;
}

class Dllwrapper
{
    [DllImport("samplecdll.dll")]
    public static extern SAMPLE_STRUCT sampleFunction(SAMPLE_STRUCT ss);

}
Run Code Online (Sandbox Code Playgroud)

我使用1字节ASCII.

有没有人有关于如何做到这一点的提示或解决方案?

.net c c# pinvoke unmanaged

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

从C#/ .NET调用C++函数

我有一个有C++项目和C#项目的解决方案.

C++项目定义了一个类,我想在C#中实例化并调用其成员函数.到目前为止,我设法实例化了这个类:

CFoo Bar = new CFoo();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在其上调用函数时,编译器说,它不可用.

此外,当我在调试器中检查对象时,不会显示任何成员.

我在这里错过了什么?

.net c# unmanaged c++-cli

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

C++访问main之外的命令行参数?

我有几个命令行应用程序,最终都调用com对象.他们可以访问从命令行传递的参数,而不是为这些com对象添加新接口吗?

编辑:排序我如何调用GetModuleFileName来获取文件名.我想知道是否有一个等效的方法来获得args.

c++ windows arguments unmanaged

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

将intPtr添加到int会在.net framework 3.5上生成错误

我有这个代码:

lvItem.pszText = (IntPtr)(lpRemoteBuffer + Marshal.SizeOf(typeof(LV_ITEM)));
Run Code Online (Sandbox Code Playgroud)

它在4.0上工作正常.

如果我将项目降级到3.5,它会给我这个错误:

Operator '+' cannot be applied to operands of type 'System.IntPtr' and 'int'
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题,让它在3.5上工作

我不知道为什么它在4.0中有效?

提前致谢

c# unsafe unmanaged

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

ubuntu中的单声道和非托管代码

我正在使用在Ubuntu 12 x64上运行的Mono 2.10.现在我需要知道如何使用非托管代码.

[DllImport("libc.so")]
public static extern int getpid ();
Run Code Online (Sandbox Code Playgroud)

而且,在下一步我有:

getpid();
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误

$ MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" mono libc_test.exe
Mono: DllImport attempting to load: 'libc.so'.
Mono: DllImport loading library:     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared     object file: No such file or directory'.
Mono: DllImport loading library:     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared     object file: No such file or directory'.
Mono: DllImport loading location: 'libc.so'.
Mono: DllImport error loading library: '/usr/lib/x86_64-linux-gnu/libc.so: invalid     ELF …
Run Code Online (Sandbox Code Playgroud)

linux mono 64-bit unmanaged

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

其他进程的GetKeyboardLayoutName?

基本上,我想做的是让 GetKeyboardLayoutName 返回其他进程的键盘 ID (KLID)。默认情况下,它仅重新运行我的应用程序窗口的键盘 ID。我也尝试了 GetKeyboardLayout 但不幸的是它返回了 HKL(它接受其他窗口的 hwnd)。

或者,如果有一种方法可以将 HKL 转换为 KLID,那也很好,但我怀疑是否存在这样的事情。

那么,我怎样才能实现这一目标呢?我希望能够使用获得的KLID作为LoadKeyboardLayout函数的参数。

c# windows keyboard winapi unmanaged

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

如何获取列表的指针?

所以我知道列表里面保存着数组,所以我需要获取它的未知类型的指针(void *)。使用数组很容易做到:

int[] items;
fixed (void* pointer = items)
{

}
Run Code Online (Sandbox Code Playgroud)

所以我需要对列表做同样的事情

List<int> items;
fixed (void* pointer = items)
{

}
Run Code Online (Sandbox Code Playgroud)

这段代码似乎不起作用。我不想将列表复制到新数组,我想访问指向其内部数组的指针

c# unmanaged

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

如何通过WinDBG在Dump中查找非托管内存中的内容

我在WinDbg命令中运行转储文件

地址-摘要

我的结果是这样的

Usage Summary   RgnCount    Total Size  %ofBusy %ofTota

    Free            3739    7ff5`dbbae000 ( 127.960 Tb)                 99.97%
    <unknown>       1677    5`680a1000 (  21.626 Gb)    53.31%       0.02%
    Heap            20349   4`0049f000 (  16.005 Gb)    39.45%       0.01%
    Stack           230 0`a3e90000 (   2.561 Gb)    6.31%        0.00%
Run Code Online (Sandbox Code Playgroud)

如何在堆中找到内容?什么是对象或什么是类型?

是托管堆,而堆是托管堆?

很难问这样的问题,所以我添加了更多信息

这是我的C#示例代码

class Program
{

    public static int[] arr;
    public static AllocateUnmanagedMemory cls;


    static void Main(string[] args)
    {
        const int GBSize = 1 * 1024 * 1024 * 1024/ sizeof(int);

        Console.WriteLine("Allocating");

        arr = new int[GBSize];

        cls = …
Run Code Online (Sandbox Code Playgroud)

heap unmanaged windbg dump sos

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

如何从C#导入和使用非托管C++类?

我有一个原生的C++ DLL,一些头文件和导入库.有没有办法如何在dll中定义的C#中实例化对象?

我所知道的两种方式是:

  1. 将C++代码包装到COM中
  2. 使用DLLImport和外部C函数

c# c++ com unmanaged

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

标签 统计

unmanaged ×10

c# ×6

c++ ×3

.net ×2

windows ×2

64-bit ×1

arguments ×1

c ×1

c++-cli ×1

com ×1

double ×1

dump ×1

heap ×1

keyboard ×1

linux ×1

managed ×1

mono ×1

pinvoke ×1

sos ×1

unsafe ×1

winapi ×1

windbg ×1