[Programming] chuyển đối tượng String thành char* trong VC++ .NET |
01/09/2006 01:04:44 (+0700) | #1 | 19551 |
|
hakuso
HVA Friend
|
Joined: 04/01/2004 13:28:06
Messages: 287
Location: làng Đo Đo
Offline
|
|
Câu chuyện là thế này )
Tui cần phải dùng một thư viện C++ trong C# và đang đi theo hướng là: tạo 1 dll C++ .NET, trong dll đó sẽ dùng thư viện C++ này và nó đưa ra các method khác cho C# gọi.
Hiện tại thì tui chỉ có thể dùng thư viện C++ đó trong VC .NET thôi, còn để giao tiếp với C# thì gặp rắc rối đầu tiên là kiểu dữ liệu không giống nhau.
Trong thư viện nó dùng char* để đại diện cho chuỗi, còn C# thì dùng String hay char[].
Vấn đề là, trong dll C++ .NET đó, mình đã có đối tượng String rồi (nhận từ C#), vậy làm cách nào để chuyển String thành char* đây ?
Tui không dùng được cú pháp mới (array<> vì để cho C# thấy class C++. Tui phải dùng Common Language Runtime Support, Old Syntax (/clr:oldSyntax)
(click phải vô project C++, chọn properties, "Configuration Properties" > "Common Language Runtime support"
Chờ tin vui lẫn buồn ) |
|
Live, fight, work and study |
|
|
|
[Question] chuyển đối tượng String thành char* trong VC++ .NET |
01/09/2006 02:47:58 (+0700) | #2 | 19585 |
|
Z0rr0
Q+WRtaW5pc3RyYXRvc+g
|
Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
|
|
Bác xem ví dụ tôi sử dụng Platform Invoke như sau:
Tôi viết 1 Regular DLL tên là exportdll.dll bằng VC++ có 1 export function như sau:
Code:
void ABC1(char* test)
{
MessageBox(NULL, test, "testfn", MB_OK);
}
Lưu ý nếu không dùng __declspec(dllexport) cho hàm này thì đặt tên hàm này vào file .def
Sau đó từ project C#, tôi dùng như sau:
Code:
using System.Runtime.InteropServices;
namespace exportdllNET
{
public class MyClass
{
[DllImport("exportdll.dll", CharSet=CharSet.Ansi)]
public static extern void ABC1([MarshalAs(UnmanagedType.LPStr)]
string test);
//Khi dùng
private void Mỳunc()
{
String a = "aaabbb";
ABC1(a);
}
}
}
|
|
Hibernating |
|
|
|
[Question] chuyển đối tượng String thành char* trong VC++ .NET |
01/09/2006 06:45:34 (+0700) | #3 | 19650 |
|
hakuso
HVA Friend
|
Joined: 04/01/2004 13:28:06
Messages: 287
Location: làng Đo Đo
Offline
|
|
Z0rr0 hiểu sai ý rùi )
Ý mình là vầy
Dùng VC 6.0 viết 1 thư viện tĩnh, tức là kết quả ra sẽ là file abc.lib
Trong thư viện tĩnh đó sẽ implement 2 method
Code:
int AA()
{
...
}
char BB()
{
}
Vấn đề là làm sao cho C# dùng được 2 method này ?
Cảm ơn Z0rr0 nhưng mình đã giải quyết được rồi, thực là hỏi chuối quá đi (
Muốn chuyển sang chuỗi byte thì chỉ việc đọc từng index trong String rồi đưa vào chuỗi byte là xong, huhu |
|
Live, fight, work and study |
|
|
|
[Question] chuyển đối tượng String thành char* trong VC++ .NET |
01/09/2006 07:17:09 (+0700) | #4 | 19655 |
|
Z0rr0
Q+WRtaW5pc3RyYXRvc+g
|
Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
|
|
|
|
[Question] chuyển đối tượng String thành char* trong VC++ .NET |
01/09/2006 07:50:29 (+0700) | #5 | 19670 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
hổng hiểu bác muốn gì nữa. |
|
|
|
|
[Question] chuyển đối tượng String thành char* trong VC++ .NET |
01/09/2006 09:55:45 (+0700) | #6 | 19698 |
TQN
Elite Member
|
0 |
|
|
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
|
|
Ừ, lung tung luôn, sao giờ lại lòi ra cái .lib. File .lib thì làm sao mà dùng cho C# được, hay quá vậy, hay tui hỗng biết. |
|
|
|
|
[Question] chuyển đối tượng String thành char* trong VC++ .NET |
02/09/2006 06:42:08 (+0700) | #7 | 20028 |
|
hakuso
HVA Friend
|
Joined: 04/01/2004 13:28:06
Messages: 287
Location: làng Đo Đo
Offline
|
|
ThangCuEm wrote:
Ừ, lung tung luôn, sao giờ lại lòi ra cái .lib. File .lib thì làm sao mà dùng cho C# được, hay quá vậy, hay tui hỗng biết.
Tất nhiên là không dùng được, nhưng mình đi vòng thì sẽ được (mặc dù không dễ dàng). Đó là đi theo cách tui nói: tạo 1 dll C++ .NET và trong đó mình sẽ dùng thư viện lib này. Khi C# add reference dll vào. Nó chỉ thấy các method mình viết và chỉ việc gọi, và bên trong method đó mình sẽ dùng thư viện lib.
Đúng ra tui nói không rõ ràng trong bài đầu. Xin rút kinh nghiệm ) |
|
Live, fight, work and study |
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|