我希望在我的WCF服务上有一个函数,其返回类型作为接口,但是当我从客户端调用它时,我收到一个System.Object
,而不是实现服务发送的接口的类.
以下是一些示例代码:
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
[OperationContract]
IMyObject GetMyObject();
}
public interface IMyObject
{
int Add(int i, int j);
}
[DataContract]
public class MyObject : IMyObject
{
public int Add(int i, int j)
{
return i + j;
}
}
Run Code Online (Sandbox Code Playgroud)
在这项服务的实施中,我有:
public class LinqService : IService
{
public string SayHello()
{
return "Hello";
}
public IMyObject GetMyObject()
{
return new MyObject();
}
}
Run Code Online (Sandbox Code Playgroud)
SayHello()
运作良好,但GetMyObject()
返回一个System.Object
.如何更改此代码以便GetMyObject()
返回实现的对象IMyObject
?
编辑1 …
我正在开发一个WPF应用程序,我需要指向控件内的主应用程序窗口.我正在使用Caliburn Micro.
Application.Current.MainWindow
是 null
如何MainWindow
在Caliburn Micro中获取应用程序的参考?
我有一个 cmake 文件,它增加了这样的提升:
if(ADD_BOOST)
#add boost library
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON)
file(TO_CMAKE_PATH $ENV{BOOST_ROOT} BOOST_ROOT)
if (MSVC)
set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib64-msvc-12.0)
else (MSVC)
set(BOOST_LIBRARY_DIR $ENV{BOOST_ROOT})
endif (MSVC)
find_package(Boost COMPONENTS filesystem system program-options thread REQUIRED)
endif (ADD_BOOST)
Run Code Online (Sandbox Code Playgroud)
我有这条线:
find_package(Boost COMPONENTS filesystem system program-options thread REQUIRED)
Run Code Online (Sandbox Code Playgroud)
我想使用 boost 中的程序选项 libabray。我应该在上面的列表中添加什么名字?
我在哪里可以找到我可以在上面提到的 cmake 行中使用的 boost 库列表?
我试图在我的MVC应用程序中使用动态类型模型.我有以下代码:在控制器中:
var model = new { Name = "test name", Family = "m" };
return this.View(model);
Run Code Online (Sandbox Code Playgroud)
在我看来,我有:
@model dynamic
@if(Model!=null)
{
<p> @Html.Raw(Model.Name) </p>
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到以下错误:
'object' does not contain a definition for 'Name' (System.Exception {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误?在调试期间,如果我将光标放在@Model上,我可以看到它有两个名为Name和Family的属性.
我想运行一个cmd并在其中运行一些命令.我写了这段代码:
Process p = new Process();
ProcessStartInfo info =new ProcessStartInfo();
info.FileName = "cmd.exe";
info.WorkingDirectory = this.workingDirectory;
info.RedirectStandardInput = true;
info.UseShellExecute = false;
info.CreateNoWindow = true;
p.StartInfo = info;
var x=p.Start();
using (StreamWriter sw = p.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
sw.WriteLine(@"set path=c:\temp"+ ";%path%");
sw.WriteLine(@"@MyLongproces.exe");
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用:
info.CreateNoWindow
为false
).问题是什么?我该如何解决?
此代码不起作用:
string binDirectory = Path.Combine(FileSystem.ApplicationDirectory, this.binFolderName);
ProcessStartInfo info = new ProcessStartInfo("cmd", @"/c " + Path.Combine(binDirectory, command));
info.RedirectStandardInput = false;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
info.CreateNoWindow …
Run Code Online (Sandbox Code Playgroud) 我在wpf窗口上有一个Grid,我想添加一个功能,用户可以通过单击删除按钮删除一些项目.该应用程序使用Calibrun Micro将视图绑定到ViewModel.
我的问题?
1-在WPF中使用按钮从网格中删除项目是一个好主意吗?
2-如何将按钮绑定到VM上的方法,并在methd中获取指向应删除的项目的指针?
我以这种方式将按钮添加到datagrid:
<DataGridTemplateColumn Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" cal:Message.Attach="DeleteFromList($dataContext)" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
和c#代码如下:
public void DeleteFromList(object tmp)
{
}
Run Code Online (Sandbox Code Playgroud)
但是datagrid上的按钮被禁用,单击它们不会触发DeleteFromList方法(我使用调试器检查).
为什么他们被禁用?如何启用它们?
我有一个类似于这个的类:
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
class C
{
int m_functionType;
C(int functionType)
{
m_functionType=functionType;
}
int calc(int a, int b)
{
switch(m_functionType)
{
case 1: // add
return add(a,b);
break;
case 2: // subtract
return sub(a,b);
}
}
};
Run Code Online (Sandbox Code Playgroud)
并使用如下:
main()
{
C add(1);
C sub(2);
auto x=add.calc(1,2);
auto z=sub.calc(2,1);
}
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但应该调用的函数在运行时被解析,我正在寻找一个解决方案来解决在编译时调用的函数.像这样的东西:
template <int func>
class C
{
int calc(int a, int b)
{
switch(func)
{
case 1: …
Run Code Online (Sandbox Code Playgroud) 我正在将在 Linux 上完美运行的代码移植到 Windows Visual C++。我在 Linux 中有这样的代码:
struct exif_desc
{
uint16_t tag;
uint16_t type;
uint32_t length;
uint32_t value;
}
__attribute__((__packed__));
Run Code Online (Sandbox Code Playgroud)
我在 Windows 上遇到错误:
'__packed__' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以通过使用来修复此错误
#pragma pack(1)
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别吗?Linux 和 Windows 中是否有可用于此属性的语法?
我已经阅读了这篇文章,但它没有回答我的问题:(cmake 无法找到 openssl)
我在 Windows 10 64 位中工作,我想使用带有 ssl 支持的 boost asio,因此我在 C:\Local\OpenSSL-Win64 中安装了 openssl,并且有一个指向此的环境变量。
我在 cmake 中有这段代码:
file(TO_CMAKE_PATH $ENV{OPENSSL_ROOT} OPENSSL_ROOT_DIR)
message(WARNING "root: ${OPENSSL_ROOT_DIR}")
find_package(OpenSSL )
message(WARNING "OpenSSL_VERSION: ${OPENSSL_VERSION}")
message(WARNING "OpenSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
message(WARNING "OpenSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")
Run Code Online (Sandbox Code Playgroud)
当我运行 cmake 时,我收到以下消息:
CMake Warning at CMakeLists.txt:44 (message):
root: C:/Local/OpenSSL-Win64
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindOpenSSL.cmake:293 (list):
list GET given empty list
Call Stack (most recent call first):
CMakeLists.txt:45 (find_package)
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindOpenSSL.cmake:294 (list):
list GET given empty list
Call …
Run Code Online (Sandbox Code Playgroud) 我注意到opencv 4已发布,一个区别是API更改为与c ++ 11兼容。
这到底是什么意思?
如何更改我的代码以与此版本兼容?