鉴于此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*进行编译.我不知道这是否正确,我没有机会对其进行测试(许可问题).
考虑下面的控制台应用程序,其特色是具有捕获类型异常的通用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) 我正在学习编程,而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) 我有以下模板集:
//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#的旧版ASP页面.一个问题是需要调整HTML属性以纠正一些双引号问题.
我的问题是,当我添加双引号时,VS尽职地将结束引号插入错误的位置.然后我需要删除报价并输入结束报价.我还必须注意,当我插入结束报价时,它不会引入另一个额外的报价.
我用谷歌搜索解决方案,我相信它很容易关闭.但我无法找到合适的关键词.
它是合理的,使对显式调用规则Dispose()的有关IDisposable对象?
是否存在using声明无法正确确保IDisposable清除对象的情况?
我刚刚重新安装vs2008并在第一次运行时意外选择了Web Developer而不是C#Developer,而现在我习惯的所有键绑定都是错误的.如何将其更改为C#Developer?
我尝试了devenv/resetsettings,但它只重置了我的字体和其他设置.
我遇到了一个异常并在观察窗口中查看变量,我看到了一些问号(???).这是否意味着它指向一个无效的地址?
好吧,说我有这样的应用程序:
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倍!
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列表不起作用.我想要一个对象列表吗?这是我能得到的最接近的吗?
为临时数据结构定义结构或类似乎对我来说是冗长和迂腐的.
c# ×5
.net ×3
c++ ×2
arrays ×1
asp-classic ×1
coding-style ×1
debugging ×1
dllimport ×1
generics ×1
idisposable ×1
pinvoke ×1
resize ×1
sizeof ×1
templates ×1