我刚刚开始开发一个小的C++程序中使用的GraphViz的图形库,发现居然有3不同的API: libgraph,libcgraph和libagraph.WTF?
我想知道它们之间有什么区别,使用哪一个以及在哪里查找API文档.我查看了GraphViz 文档和邮件列表档案,但我发现了许多断链,很多错误或误导性的信息,现在我很困惑.
有谁知道为什么在dlopen()中初始化的库会初始化主程序拥有的静态变量.主程序和共享库都有静态变量的副本,但由于某种原因,共享库重新初始化主程序的静态变量副本并对其进行破坏,在主程序试图破坏它时导致段错误.
这是在符号表中出现错误名称的情况吗?
symbols shared-libraries static-variables segmentation-fault dlopen
我最近编写了一个查询PyPI并下载包的脚本; 但是,程序包会下载到用户定义的文件夹中.
如果未指定文件夹,我想以下载文件进入临时文件夹的方式修改脚本.
*nix机器中的临时文件夹是"/ tmp"; 我可以使用任何Python方法找出特定机器中的临时文件夹吗?
如果没有,有人可以建议替代这个问题吗?
我是一个SQLAlchemy noob.
假设我在声明模式下有一个用户表:
class User(Base):
__tablename__ = 'user'
id = Column(u'id', Integer(), primary_key=True)
name = Column(u'name', String(50))
Run Code Online (Sandbox Code Playgroud)
当我知道用户的id没有加载到会话中的对象时,我更新这样的用户:
ex = update(User.__table__).where(User.id==123).values(name=u"Bob Marley")
Session.execute(ex)
Run Code Online (Sandbox Code Playgroud)
我不喜欢使用User.__table__,我应该不再担心吗?
有一个更好的方法吗?
谢谢!
我在一个模式(比如dbo)中有一组表(比如Account,Customer),我在另一个模式中有一些其他表(比如Order,OrderItem)(比如库存).Order表和Customer表之间存在关系.我想删除第一个模式(dbo)中的表与第二个模式(库存)中的表之间的所有关系,而不删除同一模式中的表之间的关系.
那可能吗?任何帮助赞赏.
我创建了类库,其中一些是世界各地的其他人使用的,现在我开始使用Visual Studio 2010,我想知道切换到使用代码契约是多么好的想法,而不是常规的旧代码 - 风格if语句.
即.而不是这个:
if (fileName == null)
throw new ArgumentNullException("fileName");
Run Code Online (Sandbox Code Playgroud)
用这个:
Contract.Requires(fileName != null);
Run Code Online (Sandbox Code Playgroud)
我问的原因是我知道静态检查器不可用,所以我对我做的一些假设有点紧张,编译器无法验证.当有静态检查程序时,这可能导致类库无法为下载它的人编译.这个,再加上我甚至无法重现这个问题的事实,会让它很难解决,而且我会认为它不会说我的类库的质量如果它看起来甚至没有编译出来的框.
所以我有几个问题:
任何的建议都受欢迎.
编辑:让我澄清一下我的意思.
假设我在类中有以下方法:
public void LogToFile(string fileName, string message)
{
Contracts.Requires(fileName != null);
// log to the file here
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个代码:
public void Log(string message)
{
var targetProvider = IoC.Resolve<IFileLogTargetProvider>();
var fileName = targetProvider.GetTargetFileName();
LogToFile(fileName, message);
}
Run Code Online (Sandbox Code Playgroud)
现在,在这里,IoC启动,解决了一些"随机"类,它为我提供了一个文件名.让我们说对于这个库,没有办法可以找回一个不会给我一个非空文件名的类,但是,由于IoC调用的性质,静态分析无法验证这个,因此可能假设一个可能的值可能为null.
因此,静态分析可能会得出结论,存在LogToFile使用null参数调用方法的风险,因此无法构建.
我理解我可以在代码中添加假设,说编译器应该认为fileName我从该方法返回的那个永远不会为null,但是如果我没有静态分析器(VS2010 Professional),那么代码会为我编译,因此我可能会将此作为一个睡眠错误,让终极找到的人.换句话说,这里可能没有编译时警告可能存在问题,因此我可能会按原样释放库.
这是一个真实的场景和问题吗?
在一个DataTable对象中,是否增加了按名称thisRow("ColumnA")而不是按列索引查找列值的开销thisRow(0)?在哪种情况下这可能是一个问题.
我在一个有很多编写VB6代码经验的团队工作,我注意到没有按名称对DataTable对象或数据网格进行列查找.即使在.NET代码中,我们也使用一组整数常量来引用这些类型的对象中的列名.我问我们的团队负责人为什么会这样,他提到在VB6中,按列名而不是索引查找数据有很多开销.这对于.NET仍然如此吗?
示例代码(在VB.NET中,但同样适用于C#):
Public Sub TestADOData()
Dim dt As New DataTable
'Set up the columns in the DataTable '
dt.Columns.Add(New DataColumn("ID", GetType(Integer)))
dt.Columns.Add(New DataColumn("Name", GetType(String)))
dt.Columns.Add(New DataColumn("Description", GetType(String)))
'Add some data to the data table '
dt.Rows.Add(1, "Fred", "Pitcher")
dt.Rows.Add(3, "Hank", "Center Field")
'Method 1: By Column Name '
For Each r As DataRow In dt.Rows
Console.WriteLine( _
"{0,-2} {1,-10} {2,-30}", r("ID"), r("Name"), r("Description"))
Next
Console.WriteLine()
'Method 2: By Column Name ' …Run Code Online (Sandbox Code Playgroud) 我昨天刚刚安装了Visual Studio 2010.作为其中一部分,我安装了VSTO 4.0.现在,当我运行任何Office应用程序时,我的VSTO 3.0插件无法加载.事件日志中的错误是
自定义URI:file:/// H:/PathToMyAddin/MyAddin.vsto异常:自定义没有创建应用程序域所需的权限.
Microsoft.VisualStudio.Tools.Applications.Runtime.CannotCreateCustomizationDomainException:自定义没有创建应用程序域所需的权限.---> System.Security.SecurityException:此应用程序中的自定义功能无效,因为管理员已将file:/// H:/PathToMyAddin/MyAddin.vsto列为不可信.请联系您的管理员以获得进一 Microsoft.VisualStudio.Tools.Office.Runtime.RuntimeUtilities.VerifySolutionUri(Uri uri)at Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.CreateCustomizationDomainInternal(String solutionLocation,String manifestName,String documentName,Boolean showUIDuringDeployment,IntPtr hostServiceProvider,IntPtr&executor)失败的程序集区域是:MyComputer
好像这可能是因为它试图加载不同版本的.NET是相同的进程/ AppDomain.但是,错误将表明它是某种权限问题.
上周末我遇到了一个开源项目,当时我碰到了一些代码,让我很困惑地查看了C#规范中的用法.
问题中的代码如下:
internal static class SomeStaticClass
{
private const int CommonlyUsedValue = 42;
internal static string UseCommonlyUsedValue(...)
{
// some code
value = CommonlyUsedValue + ...;
return value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
我被猝不及防,因为这似乎是静态函数使用的非静态字段,有些如何在静态类中编译得很好!
规范声明(§10.4):
常量声明可以包括一组属性(§17),一个新修饰符(§10.3.4),以及四个访问修饰符的有效组合(§10.3.5).属性和修饰符适用于constant-declaration声明的所有成员.尽管常量被认为是静态成员,但常量声明既不需要也不允许使用静态修饰符.同一修饰符在常量声明中多次出现是错误的.
所以现在它更有意义,因为常量被认为是静态成员,但句子的其余部分对我来说有点令人惊讶.为什么常量声明既不需要也不允许使用静态修饰符?不可否认,我不知道这个规范是否足以让它立即变得有意义,但为什么决定不强制常量使用静态修饰符如果它们被认为是静态的?
查看该段落中的最后一句,我无法弄清楚它是否直接与前一个语句有关,并且在常量上有一些隐式静态修饰符,或者它是否作为常量的另一个规则.任何人都可以帮我解决这个问题吗?
我正在编写一个Eclipse插件,它使用JDT AST ASTParser来解析方法.我在该方法中寻找创建特定类型的对象.
当我找到a时ClassInstanceCreation,我会调用getType()它来查看实例化的类型.我想确保那里处理的完全解析类型是我认为的那个,所以我告诉结果Type对象resolveBinding().我得null回去,即使没有编译错误,即使我叫setResolveBindings(true)上我ASTParser.我给了我的ASTParser(via setSource())ICompilationUnit包含我的方法,因此解析器可以访问整个工作区上下文.
final IMethod method = ...;
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
parser.setSource(method.getCompilationUnit());
parser.setSourceRange(method.getSourceRange().getOffset(), method.getSourceRange().getLength());
parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
final TypeDeclaration astRoot = (TypeDeclaration) parser.createAST(null);
final ClassInstanceCreation classInstanceCreation = walkAstAndFindMyExpression(astRoot);
final Type instantiatedType = classInstanceCreation.getType();
System.out.println("BINDING: " + instantiatedType.resolveBinding());
Run Code Online (Sandbox Code Playgroud)
为什么要resolveBinding()回来null?我怎样才能获得绑定信息?
c# ×2
python ×2
.net ×1
c#-4.0 ×1
c++ ×1
constants ×1
declarative ×1
dlopen ×1
eclipse-jdt ×1
graphviz ×1
ms-office ×1
sql-server ×1
sqlalchemy ×1
static ×1
symbols ×1
t-sql ×1
vb.net ×1
vb6 ×1
vsto ×1