小编Jar*_*Par的帖子

如何将void*C API导入C#?

鉴于此C API声明如何将其导入C#?

int _stdcall z4ctyget(CITY_REC *, void *);
Run Code Online (Sandbox Code Playgroud)

我已经能够做到这一点:

   [DllImport(@"zip4_w32.dll",
        CallingConvention = CallingConvention.StdCall,
        EntryPoint = "z4ctygetSTD",
        ExactSpelling = false)]
    private extern static int z4ctygetSTD(ref CITY_REC args, void * ptr);
Run Code Online (Sandbox Code Playgroud)

当然在C#中,"void*"无法编译.

一些谷歌搜索表明它应该被翻译为"对象".这似乎应该工作.但其他人表示"Void*在C/C++术语中被称为函数指针,在C#术语中是一个委托".在这里,这并不是很有意义,因为它会委托给谁?通过谷歌搜索找到的其他API的类似调用使用相应API中的其他函数.但是在这个API中没有其他调用是有意义的.

该调用的文档显示了一个示例:

z4ctyget(&city, “00000”);
Run Code Online (Sandbox Code Playgroud)

这似乎表明甚至可以传递静态值.

它将使用object代替void*进行编译.我不知道这是否正确,我没有机会对其进行测试(许可问题).

c# pinvoke dllimport

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

为什么安装Visual Studio 2008后,调试器下的catch(TException)处理块行为会有所不同?

考虑下面的控制台应用程序,其特色是具有捕获类型异常的通用catch处理程序的方法TException.

当使用"调试"配置构建此控制台应用程序并在Visual Studio调试器下执行时(即通过*.vshost.exe),这在Visual Studio 2005和Visual Studio 2008中都会失败.

我相信这个问题只是在我安装Visual Stuido 2008之后才出现的.

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine(Environment.Version);
        CatchAnException<TestException>();

        Console.ReadKey();
    }

    private static void CatchAnException<TException>()
        where TException : Exception
    {
        Console.WriteLine("Trying to catch a <{0}>...", typeof(TException).Name);
        try
        {
            throw new TestException();
        }
        catch (TException ex)
        {
            Console.WriteLine("*** PASS! ***");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Caught <{0}> in 'catch (Exception ex)' handler.", ex.GetType().Name);
            Console.WriteLine("*** FAIL! ***");
        }
        Console.WriteLine();
    }
}

internal class TestException : Exception
{
} …
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio-2008 visual-studio

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

你可以在初始化后调整C++数组的大小吗?

我正在学习编程,而C++是我的第一语言.不要打扰使用指针来展示我 - 我还不了解它们,并且在我有更多的空闲时间专注于此之前不会打扰.

    int mergeSort()
{
    const int n = 9;
    int originalarray[n] = {1, 3, 5, 7, 9, 2, 4, 6, 8};


    const int halfelements = (sizeof(originalarray) / sizeof(int)) / 2;
    int farray[halfelements];
    int sarray[halfelements];

    for (int i = 0; i < halfelements; i++) {
        farray[i] = originalarray[i];
    }

    for (int i = halfelements, x = 0; i < (halfelements * 2); i++, x++) {
        sarray[x] = originalarray[i];
    }
Run Code Online (Sandbox Code Playgroud)

我被分配(我不上课 - 只是与几个朋友帮我解决)合并排序算法,算法解释但不是实现.我想重写这个,所以它适用于奇数和偶数整数.我尝试添加此代码:

if ((n % 2) != 0) int …
Run Code Online (Sandbox Code Playgroud)

c++ arrays resize sizeof

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

模板专业化

我有以下模板集:

//1  
template< typename T > void funcT( T arg )  
{
    std::cout<<"1: template< typename T > void funcT( T arg )";  
}  
//2  
template< typename T > void funcT( T * arg )  
{
    std::cout<<"2: template< typename T > void funcT( T * arg )";  
}  
//3  
template<> void funcT< int >( int arg )  
{  
    std::cout<<"3: template<> void funcT< int >( int arg )";  
}  
//4  
template<> void funcT< int * >( int * arg )  
{  
    std::cout<<"4: …
Run Code Online (Sandbox Code Playgroud)

c++ templates specialization

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

在Visual Studio 2010中关闭自动引用插入

我正在编辑大量已转换为C#的旧版ASP页面.一个问题是需要调整HTML属性以纠正一些双引号问题.

我的问题是,当我添加双引号时,VS尽职地将结束引号插入错误的位置.然后我需要删除报价并输入结束报价.我还必须注意,当我插入结束报价时,它不会引入另一个额外的报价.

我用谷歌搜索解决方案,我相信它很容易关闭.但我无法找到合适的关键词.

visual-studio-2010 asp-classic visual-studio double-quotes

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

避免显式调用Dispose()是否合理?

它是合理的,使对显式调用规则Dispose()的有关IDisposable对象?

是否存在using声明无法正确确保IDisposable清除对象的情况?

c# idisposable

9
推荐指数
2
解决办法
2078
查看次数

VS2008如何从Web Developer更改为C#Developer设置

我刚刚重新安装vs2008并在第一次运行时意外选择了Web Developer而不是C#Developer,而现在我习惯的所有键绑定都是错误的.如何将其更改为C#Developer?

我尝试了devenv/resetsettings,但它只重置了我的字体和其他设置.

visual-studio-2008 visual-studio

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

Visual Studio监视窗口中的问号(???)表示什么?

我遇到了一个异常并在观察窗口中查看变量,我看到了一些问号(???).这是否意味着它指向一个无效的地址?

debugging visual-studio

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

如何尝试捕捉未找到的装配

好吧,说我有这样的应用程序:

using System;
using AliensExist; // some DLL which can't be found...
Run Code Online (Sandbox Code Playgroud)

我想的是,如果大会DLL AlienExist无法找到该应用程序将不会返回一个错误 - 而是被"trycatched"这就是说,...:

using System;
try{
using AliensExist; // some DLL which can't be found...
} catch {}
Run Code Online (Sandbox Code Playgroud)

怎么做?我知道use关键字以后不能使用...但我现在太懒了测试它.

10倍!

.net c#

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

在C#中表示键入的N元组

List<struct {string, string, double} > L = new List<struct {string, string, double}>;
L.Add({"hi", "mom", 5.0});
Run Code Online (Sandbox Code Playgroud)

在C#中获取此功能的最佳方法是什么?我想动态定义一个强类型元组(用于本地函数),将一堆它们保存在列表中,进行一些处理并返回结果,再也不要再触摸列表.

我实际上并不关心强类型,但是vars列表不起作用.我想要一个对象列表吗?这是我能得到的最接近的吗?

为临时数据结构定义结构或类似乎对我来说是冗长和迂腐的.

.net c# generics coding-style

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