小编Tow*_*ube的帖子

何时应该在gcnew分配的对象上调用delete?

我正在阅读以下MSKB示例,他们在托管对象上执行删除操作.

我的印象是你永远不应该删除一个带有垃圾的收集对象,而你必须把它留给垃圾收集器.

我错过了什么?

方法4

 //#include <msclr/marshal.h>
 //using namespace msclr::interop;
 marshal_context ^ context = gcnew marshal_context();
 const char* str4 = context->marshal_as<const char*>(str);
 puts(str4);
 delete context;
Run Code Online (Sandbox Code Playgroud)

c++-cli visual-studio-2008

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

.NET COM Callable Wrapper如何生成IID?

通过OLE/COM对象查看器查看由CCW创建的生成的TLB文件显示IID保持不变,除非我更改了界面的设计(这是正确的行为),我担心的是如果我在另一台机器上编译相同的代码尽管接口没有改变,因此将生成完全不同的IID,从而破坏现有的COM客户端.

  1. COM Callable Wrapper如何生成COM接口ID?
  2. CCW如何知道接口是否已更改并需要生成新的IID?
  3. 在源文件中生成自己的并声明是否更安全?

.net c++-cli ccw

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

为什么生成pdb文件会增加我的本机C++ exe的大小?

只需打开配置属性>链接器>调试>生成调试信息,我的exe的大小就从2.11MB增加到2.34MB

  1. 什么是额外的~230KB用于?我认为exe应该大致相同的大小(给pdb文件提供或采取额外的路径)但不是那么多.这种"膨胀"会不会有任何影响?

  2. 我还看到配置属性> C/C++>常规>调试信息格式设置为在发布模式下禁用,而pdb文件设置为生成,这有什么原因吗?从我所知道的exe是相同的大小 - 只是PDB在你启用程序数据库时变得更大,我看不出这个问题,但我想确保没有一些我是缺少考虑程序数据库是发布配置中新项目的默认值.

c++ visual-studio-2008

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

在现代编程中使用ASCII分隔符(29-31)

我正在构建一个哈希键字符串(从地图折叠),其中的值由特殊的ASCII单位分隔符31(1F)分隔.

这很好地解决了试图猜测字符串值中不使用哪些ASCII字符的问题,我不需要担心转义或引用值等.

然而,阅读关于它的历史它似乎是20世纪60年代的遗物,我没有看到很多例子,其中字符串是使用这个特殊字符构建和标记的,所以这一切似乎都太容易了.

在现代应用程序中使用此分隔符是否有任何问题?

我目前正在非Unicode C++应用程序中执行此操作,但是我很想知道这通常适用于其他语言,例如Java,C#和Unicode.

ascii

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

为什么在调试中禁用增量链接?

在 MS Visual C++ 2008 中,是否有任何理由在调试版本中禁用增量链接?

从我有限的阅读启用增量构建让我更快地链接和编辑 & 继续。

我不知道你为什么要禁用这个伟大的功能。什么是缺点?是片状的吗?

编辑: 我正在使用一个包含多个项目的解决方案(少数 dll 链接到几个 exe),并且大多数(但不是全部)在调试中禁用了增量链接。

c++ visual-studio-2008

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

选择和更新之间的竞争条件

我需要更新Oracle数据库中的一行,这样我就不会在基于Web的应用程序中默默地破坏来自其他客户端的更改.

在我当前的系统中,我执行以下操作:

SELECT * FROM table WHERE id=:ID AND lastmodified=:LASTMOD
Run Code Online (Sandbox Code Playgroud)

如果我们开始时行仍然存在相同的最后修改日期,我们知道没有人改变它,所以我们可以使用上次修改时间进行更新.

然而,当使用两个会话手动执行此操作时,我注意到如果两个客户端在大致相同的时间选择,则可能会错过选择和更新步骤之间的行已更改,因为两者都在同一秒或毫秒内发生.

最终结果是我破坏了其他用户的更改,并且没有发生任何警告.

我正在考虑使用SELECT FROM UPDATE,但显然这是一个坏主意(特别是对于网络应用程序),文章建议重新阅读(这是我上面所做的),但我仍然认为我有竞争条件的风险.

编辑:说清楚我关注时间被引用的方式.

oracle oracle11g

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

从本地控制台应用程序从C++/CLI DLL调用C#库时,无法授予最小权限请求

Assembly开始,此问题在使用自定义解析程序时不允许部分信任的调用者

感谢该问题的解决方案,我现在能够从本地控制台应用程序调用网络共享上的C#库(不更改CasPol)

我现在需要采取下一步,即从另一个与C#Library位于网络上相同文件夹中的混合C++/CLI DLL调用C#库.C++/CLI DLL将由本地控制台应用程序调用.

我在上面使用相同的自定义处理程序(即有证据),当从本地控制台应用程序调用C#库时,它可以正常工作.

从本地控制台应用程序调用C++/CLI库时,出现以下异常:

无法加载文件或程序集"MyCplusplusCLILib,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.无法授予最低权限请求.(HRESULT异常:0x80131417)

如果我完全信任网络位置它可以正常工作但是我不明白为什么我需要授予这种信任时,根据3.5 SP1中的更改​​,Intranet不再需要FullTrust应用于它(所有库都是为.NET 3.5编译的)在Visual Studio选项中)

.net c# c++-cli

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

如何在C++中不存在对象时清楚说明?

我有一个类,它取决于应用程序的状态,用户选项可能并不总是能够存在于任何有意义的状态.

当对象不存在时,最清楚的方法是什么?

到目前为止我想到的两个想法以及为什么我不相信它们不是答案:

  1. 智能指针设置为NULL当对象不存在,这发出了一个明确的信息,有没有对象这里,但是我读过,动态内存分配使用"新"应该是例外而不是在C++的规则,它也阻止我通过引用其他函数传入(因为指针可能并不总是指向一个对象).
  2. 对象中的布尔标志,在设置时会导致调用的任何方法抛出异常.这需要检查每种方法,并感觉像一个kludge.我也相信,最好的做法是,所有存在的对象应该是有效的 ,我们不应该需要调用一个validate(或类似)功能,因为对象的存在意味着它已经有效和准备,以呼吁它的方法.

c++

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

从打包函数返回集合以供select使用

我目前正在使用这段代码从我的函数中返回一组行.

--Source: http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html

create or replace type t_col as object (
i number,
n varchar2(30)
);
/
create or replace type t_nested_table as table of t_col;
/
create or replace function return_table return t_nested_table as
  v_ret   t_nested_table;
begin
  v_ret  := t_nested_table();

  v_ret.extend;
  v_ret(v_ret.count) := t_col(1, 'one');

  v_ret.extend;
  v_ret(v_ret.count) := t_col(2, 'two');

  v_ret.extend;
  v_ret(v_ret.count) := t_col(3, 'three');

  return v_ret;
end return_table;
/
Run Code Online (Sandbox Code Playgroud)

我通过发出SQL来调用它

select * from table(return_table);
Run Code Online (Sandbox Code Playgroud)

无法在包中定义对象类型,我尝试使用有效的记录类型(在PL/SQL中),但我无法以与此相同的方式从中进行选择.

如何使用包内的函数实现此结果?

oracle plsql

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

标签 统计

c++ ×3

c++-cli ×3

visual-studio-2008 ×3

.net ×2

oracle ×2

ascii ×1

c# ×1

ccw ×1

oracle11g ×1

plsql ×1