小编daz*_*ler的帖子

C#没有捕获来自非托管C++ DLL的未处理异常

我有一个从C#应用程序调用的非托管C++ DLL,我试图让C#应用程序捕获所有异常,以便在由于非托管异常导致dll失败的情况下,用户将得到一个半合适的错误消息(C#app是一个实现它自己的http处理程序的Web服务).

我遇到的问题是并非所有类型都被捕获.因此,如果我创建以下内容并执行C#应用程序,则dll会抛出错误并终止整个应用程序.有任何想法吗?

这是在VS2005中使用.Net framework v2创建的

C++ - Test.h

#ifndef INC_TEST_H
#define INC_TEST_H

extern "C" __declspec(dllexport) void ProcessBadCall();

#endif
Run Code Online (Sandbox Code Playgroud)

C++ - Test.cpp

#include <iostream>
#include <vector>

using namespace std;

void ProcessBadCall()
{
  vector<int> myValues;
  int a = myValues[1];
  cout << a << endl;
}
Run Code Online (Sandbox Code Playgroud)

C# - Program.cs

class Program
{
  [DllImport("Test.dll", EntryPoint="ProcessBadCall")]
  static extern void ProcessBadCall();

  static void Main(string[] args)
  {
    try
    {
      ProcessBadCall();
    }
    catch (SEHException ex)
    {
      Console.WriteLine("SEH Exception: {0}", ex.Message);
    }
    catch (Exception ex)
    {
      Console.WriteLine("Exception: {0}", …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll pinvoke exception-handling

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

使用GO(GO1)中的多个文件构建

有谁知道是否可以使用"go build"命令从目录中的多个文件构建?例如

src/
  file1.go
  file2.go
Run Code Online (Sandbox Code Playgroud)

file1.go包含"func main()"方法,file2提供支持函数.我试过使用以下import语句,但我没有在哪里

import (
  "file2"
)

import (
  file2 "./file2"
)
Run Code Online (Sandbox Code Playgroud)

我想知道这是否需要修改GOROOT环境变量以使其工作.或者如果我只是愚蠢而且错过了令人目眩的明显事物.

谢谢

build go

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

为什么"ref"关键字与System.ServiceModel.Channels.Message一起使用?

我现在正在查看一些C#代码,我想检查一下,在我理解它应该如何工作的时候我不会疯狂.

它与传递System.ServiceModel.Channels.Message有关.采用Message对象的每个方法都有一个类似于此的方法签名:

void SomeMethod(ref Message message) { ... }
Run Code Online (Sandbox Code Playgroud)

我不明白为什么"ref"关键字在那里.据我所知,如果该方法不会完全替换该对象,则不需要它.

void SomeMethod(ref Message message)
{
    message = new Message();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果消息,例如,只是在标题中添加了其他内容,或者只是从对象中读取值,则不需要"ref"关键字,因为Message是引用类型.

void SomeMethod(Message message)
{
    message.Headers.Add("Some Data");  // This should be fine?
}
Run Code Online (Sandbox Code Playgroud)

干杯

c# ref pass-by-reference

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

MD5代码覆盖率

我目前正在实现基于MD5哈希算法的RSA数据安全代码,在UpdateData方法中有一节内容如下:

mCount[0] += (length << 3);

if (mCount[0] < (length << 3))
{
    mCount[1]++;
}
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试理解if语句如何评估为true(mCount [0]值初始化为0).任何帮助将不胜感激.

谢谢

c++ md5 code-coverage

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

标签 统计

c# ×2

c++ ×2

build ×1

code-coverage ×1

dll ×1

exception-handling ×1

go ×1

md5 ×1

pass-by-reference ×1

pinvoke ×1

ref ×1